dyld: libreria non caricata: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP non funzionava per me perché stavo riscontrando questo problema di libpng , quindi ho reinstallato una nuova versione con Homebrew.

Tuttavia, sto ricevendo un errore simile con libjpegquesta volta:

$ php -v
dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
Trace/BPT trap: 5

Eventuali suggerimenti?


Qual è l'output di brew doctore brew list?
IKavanagh

Risposte:


250

Come proposto da @ jirson-tavera nel problema del repository homebrew-php , questo può essere risolto senza sovrascrivere l'installazione della tua birra:

wget -c http://www.ijg.org/files/jpegsrc.v8d.tar.gz
tar xzf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure
make
cp ./.libs/libjpeg.8.dylib /usr/local/opt/jpeg/lib

4
Oltre ad aggiungere forse una linea dispari per la pulizia, questa dovrebbe essere la risposta accettata ...
Koen Betsens

Ha funzionato anche per me. Grazie.
Adrian Lynch

Ha funzionato anche per me. Saluti.
Eduardo Leggiero

19
Considera invece di farlo nel modo giusto .
sepehr

grazie funziona, ho avuto lo stesso problema dopo aver installato rabbitmq
Omar Makled

167

Anche se la soluzione nella risposta accettata funziona, non è il modo giusto per risolvere il problema. Viola l'integrità dei metadati di brew.

Problema

Il problema è che la jpegformula di Homebrew è stata aggiornata alla v9 ma la formula PHP "imbottigliata" esistente è ancora costruita e collegata alla versione precedente, v8, che non esiste più sul tuo sistema.

Hai alcune opzioni per risolvere il problema.

1. Ricompila la phpxxformula dall'origine (altamente consigliato)

Disinstalla la tua formula php e ricostruiscila dalla fonte invece di usare la versione in bottiglia. In questo modo, php utilizzerà e collegherà alla versione attualmente installata di jpeg. Supponendo che tu abbia a che fare con php71:

brew reinstall php71 --build-from-source

2. Esegui jpegil downgrade della formula nel modo giusto (preferibilmente rispetto alla ricompilazione manuale)

Se non hai eseguito brew cleanup, hai già la jpegversione precedente nella cantina della tua birra, passa ad essa:

brew switch jpeg 8d

Se ricevi un jpeg does not have a version "8d" in the Cellar.errore, devi prima ripristinarlo ripristinando la cronologia:

cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core
git checkout b231469
HOMEBREW_NO_AUTO_UPDATE=1 brew install jpeg
git checkout master

brew switch jpeg 8d

Puoi trovare l'hash del commit usando brew log jpege passando attraverso i messaggi di commit.

Lo svantaggio è che potrebbero esserci altre formule che richiedono la versione più recente per funzionare correttamente, ad es imagemagick. Se riscontri problemi di incompatibilità, controlla la prima soluzione sopra.

3. Downgrade jpegricompilando manualmente (non consigliato)

Recupera il sorgente, compila e sovrascrivi la versione di brew. Fare riferimento alla risposta di Denis per i dettagli.

Questo non è consigliato perché viola l'integrità dei metadati della tua birra. Brew pensa di avere la versione 8b, tuttavia, hai compilato manualmente 9b e hai sovrascritto i file.

4. Collegamento simbolico manuale della vecchia versione (sul serio?)

Non creare manualmente un collegamento simbolico al rimanente libjpeg.8.dylib. Se il file è lì, puoi semplicemente brew switchaccedervi come menzionato nella seconda soluzione sopra.

È solo il peggior trucco che puoi fare qui.


Tali problemi verranno eventualmente risolti .


4
Questa dovrebbe essere la risposta accettata quasi positivamente.
Mike Legacy

Il primo metodo ha funzionato per me, tuttavia, ho anche dovuto eseguire xcode-select --installprima di poter reinstallare PHP 7.1 dal sorgente.
jrdn

Il metodo 2 non trova più il commit, forse a causa delle forzature. Una soluzione alternativa: invece di l' git checkout b231469ho fatto curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, poi invece di git checkout masterho scritto git checkout Formula/jpeg.rb.
tuomassalo

@tuomassalo Grazie per aver condiviso la tua soluzione alternativa. Il commit esiste ancora nel mio clone locale. Se era dovuto a un push forzato, non sei stato in grado di recuperarlo utilizzando curlnessuno dei due. Per me, sembra che il tuo clone locale non sia in qualche modo aggiornato con il telecomando 🤔.
settembre

2
se git checkout b231469viene visualizzato un errore, prova prima questogit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Oggi ho riscontrato un problema simile. La causa del problema era una versione più recente di libjpeg. E la soluzione che ha funzionato è stata costruire la phpbottiglia dalla fonte.

Controlla la versione disponibile di libjpeg:

$brew info libjpeg
jpeg: stable 9b (bottled)
Image manipulation library
http://www.ijg.org
/usr/local/Cellar/jpeg/9b (20 files, 724KB) *
  Poured from bottle on 2017-08-07 at 12:06:42
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/jpeg.rb

Installa phpdalla fonte:

brew install --build-from-source php56

Aggiornamento :
se lo hai già installato, phpdevi disinstallarlo prima di costruire dal sorgente. Si applica anche alle estensioni.


lo stesso qui solo ora - cosa è successo esattamente? brew libjpeg aggiornato e ora non è nella versione giusta per php5.6?
Toby

btw. la tua risposta produce: Attenzione: josegonzalez / php / php56 5.6.30_6 è già installato probabilmente dovresti prima rimuoverlo? sembra spaventoso: P
Toby

Sì, devi disinstallare phpe le estensioni. Quindi installa phpcon --build-from-source. Ho esaminato la cronologia git della libjpegformula e la versione di è libjpegstata aggiornata al 9b5 agosto.
Paweł Wacławczyk

bello, quindi questo in qualche modo l'ha rotto ... beh, la compilazione è fatta. sembra che funzioni di nuovo ora - grazie :)
Toby

Questo ha funzionato anche per PHP 7.1, basta disinstallarlo e quindi eseguire brew install --build-from-source php71. Il problema è sorto per me stasera dopo aver corso brew upgrade.
Dwight

6

Ho avuto lo stesso problema e l'ho risolto scaricando il tarball libjpeg manuallu da qui ed eseguendo:

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo make install

sudo ranlib /usr/local/lib/libjpeg.a #Optionally

Risolto lo stesso problema per me, anche se la versione compilata dovrebbe essere v8d ora e quei file libtool non esistono sul mio sistema (funzionano ancora).
Christoph Burschka

Risolto il problema anche per me. Grazie!
Roni Laukkarinen

6

Stavo riscontrando un problema simile durante il tentativo di aggiornamento composer:

dyld: Libreria non caricata: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Riferimento da: / usr / local / bin / php
Motivo: immagine non trovata
compositore: supporto PHP Phar è richiesto per questa formula
Errore: Un requisito non soddisfatto non ha superato questa build.

Il problema era phpche non riuscivo più a trovare la libjpeglibreria. Un modo per risolvere questo problema è reinstallare phpe libjpeg. Ecco come li ho reinstallati:

# find out which version of php is installed
brew list | grep php

# uninstall php
brew uninstall php70 --ignore-dependencies

# uninstall libjpeg
brew uninstall libjpeg --ignore-dependencies

# install libjpeg again
brew install libjpeg

# install php again
brew install php70

Sono stato quindi in grado di aggiornare di nuovo tutto :)

brew update && brew upgrade

🍻


6

Una soluzione sporca, che funziona bene per me.

ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib

5

Il comando seguente ha funzionato per me.

brew switch libjpeg 8d

Questo ha funzionato per me. Ho guardato nella mia directory usando ls /usr/local/Cellar/jpeg/e ho visto due sottodirectory 8de 9c poiché il mio errore era che dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibaveva senso provare a caricare quella sbagliata.
TrophyGeek

4

Non ho provato la risposta di Jirson, ma quello che ha funzionato per me è stato:

brew uninstall libjpeg
brew install libjpeg

Cosa fai con tutti i pacchetti che dipendono da libjpeg? Errore: rifiuto di disinstallare / usr / local / Cellar / jpeg / 9b perché è richiesto da [SNIP], che sono attualmente installati.
Richard A Quadling

1
@RichardAQuadling È possibile utilizzare l' --ignore-dependenciesopzione durante la disinstallazione.
sepehr

Questo non sembra risolvere il problema per me. L'ultima versione jpeg è attualmente jpeg-9b. libjpeg.8.dylib è ancora mancante dopo aver seguito le istruzioni di @ gwg.
Gino

3

Avevo lo stesso problema e l'unica cosa che mi ha aiutato è stato utilizzare il --build-from-sourceparametro:

brew install php70 --build-from-source

2

Ho avuto anche questo problema. L'ho risolto in questo modo: Disinstalla jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Disinstallare jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Disinstallare jpeg / 8b e 9b

Reinstallare jpeg / 9b

brew install jpeg

Reinstalla jpeg / 9b


LAVORATO, sì !!
Husam

1

Lo condivido perché ho avuto lo stesso problema durante l'utilizzo di PHP5.4. In origine, avevo PHP5.6 e funzionava bene. Quindi ho eseguito il downgrade a php5.4 poiché la mia app supporta solo PHP5.4.

Quindi si è verificato questo errore. Ho notato che ho libjpeg.9.dylibe PHP5.4 sta cercando libjpeg.8.dylib.

La procedura seguente ha risolto il problema:

brew uninstall php54
brew install --build-from-source php54

0

Homebrew php è stato aggiornato e non è più un problema con libjpeg


0

Come nota @lifecom, questo è stato risolto con l'aggiornamento php70 di homebrew, ma potresti comunque riscontrare il problema se stai brew upgradecercando di aggiornare altri pacchetti prima di aggiornare php70.

Risolvi questo problema aggiornando manualmente php70 prima con brew upgrade php70e poi dovresti essere in grado di eseguire brew upgradenessun problema (o, beh, almeno senza questo problema).



0

In alcuni casi, specialmente in Catalina, il barile Homebrew per il pacchetto potrebbe esistere ma non essere collegato correttamente. In tal caso prova:

brew link libjpeg
brew reinstall php --build-from-source
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.