dyld: Bibliothek nicht geladen: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP funktionierte nicht für mich, da ich auf dieses libpng-Problem stieß , also habe ich eine neue Version mit Homebrew neu installiert.

Allerdings erhalte ich libjpegdiesmal einen ähnlichen Fehler :

$ 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

Irgendwelche Vorschläge?


Was ist die Ausgabe von brew doctorund brew list?
IKavanagh

Antworten:


250

Wie von @ jirson-tavera im Homebrew-PHP-Repo-Problem vorgeschlagen , kann dies behoben werden, ohne dass Ihre Brühinstallation überschrieben wird:

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
Abgesehen davon, dass vielleicht eine ungerade Zeile für die Bereinigung hinzugefügt wird, sollte dies die akzeptierte Antwort sein ...
Koen Betsens

Hat auch für mich gearbeitet. Vielen Dank.
Adrian Lynch

Hat auch für mich gearbeitet. Prost.
Eduardo Leggiero

19
Betrachten Sie es stattdessen richtig .
September

danke funktioniert, ich habe das gleiche Problem nach der Installation von rabbitmq
Omar Makled

167

Obwohl die Lösung in der akzeptierten Antwort funktioniert, ist dies nicht der richtige Weg, um das Problem zu beheben. Es verletzt die Integrität der Metadaten von Brew.

Problem

Das Problem ist, dass die Homebrew- jpegFormel auf Version 9 aktualisiert wurde, die vorhandene PHP-Formel in Flaschen jedoch weiterhin mit der vorherigen Version Version 8 erstellt und verknüpft ist, die auf Ihrem System nicht mehr vorhanden ist.

Sie haben einige Möglichkeiten, um das Problem zu beheben.

1. phpxxFormel aus der Quelle neu kompilieren (sehr zu empfehlen)

Deinstallieren Sie Ihre PHP-Formel und erstellen Sie sie aus der Quelle neu, anstatt die abgefüllte Version zu verwenden. Auf diese Weise wird PHP die aktuell installierte Version von verwenden und mit dieser verknüpfen jpeg. Angenommen, Sie haben es zu tun mit php71:

brew reinstall php71 --build-from-source

2. Downgrade der jpegFormel auf die richtige Weise (bevorzugt gegenüber dem manuellen Neukompilieren)

Wenn Sie nicht gelaufen sind brew cleanup, haben Sie bereits die vorherige jpegVersion im Keller Ihres Gebräus. Wechseln Sie dazu:

brew switch jpeg 8d

Wenn Sie eine jpeg does not have a version "8d" in the Cellar.Fehlermeldung erhalten, müssen Sie diese zuerst wiederherstellen, indem Sie den Verlauf zurücksetzen:

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

Sie können den Commit-Hash herausfinden, indem Sie brew log jpegdie Commit-Nachrichten verwenden und durchgehen.

Der Nachteil ist, dass es möglicherweise andere Formeln gibt, für die die neuere Version ordnungsgemäß funktionieren muss, z imagemagick. Wenn Sie auf solche Inkompatibilitätsprobleme stoßen, überprüfen Sie die erste Lösung oben.

3. Downgrade jpegdurch manuelles Neukompilieren (nicht empfohlen)

Holen Sie sich die Quelle, kompilieren Sie die Version von Brew und überschreiben Sie sie. Einzelheiten finden Sie in der Antwort von Denis .

Dies wird nicht empfohlen, da dies die Integrität Ihrer Brühmetadaten verletzt. Brew glaubt, dass es die 8b-Version hat, Sie haben jedoch 9b manuell kompiliert und die Dateien überschrieben.

4. Verknüpfen Sie die alte Version manuell (ernsthaft?)

Verknüpfen Sie den Rest nicht manuelllibjpeg.8.dylib . Wenn die Datei vorhanden ist, können Sie sie einfach brew switchwie in der zweiten Lösung oben erwähnt aufrufen.

Es ist nur der schlimmste Hack, den Sie hier machen können.


Solche Probleme werden schließlich behoben .


4
Dies sollte die akzeptierte Antwort fast positiv sein.
Mike Legacy

Die erste Methode funktionierte für mich - ich musste jedoch auch ausgeführt werden, xcode-select --installbevor ich PHP 7.1 aus dem Quellcode neu installieren konnte.
jrdn

Methode 2 findet das Commit nicht mehr, möglicherweise aufgrund von Force-Pushs. Eine Problemumgehung: Statt git checkout b231469ich curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, dann statt git checkout masterich schrieb git checkout Formula/jpeg.rb.
Tuomassalo

@tuomassalo Vielen Dank, dass Sie uns Ihre Problemumgehung mitgeteilt haben. Das Commit ist in meinem lokalen Klon noch vorhanden. Wenn es auf einen erzwungenen Stoß zurückzuführen war, konnten Sie es auch nicht mit abrufen curl. Mir scheint, dass Ihr lokaler Klon mit der Fernbedienung irgendwie nicht auf dem neuesten Stand ist 🤔.
September

2
Wenn ein git checkout b231469Fehler auftritt, versuchen Sie dies zuerstgit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Ich bin heute auf ein ähnliches Problem gestoßen. Die Ursache des Problems war eine neuere Version von libjpeg. Und die Lösung, die funktionierte, bestand darin, eine phpFlasche aus der Quelle zu bauen.

Überprüfen Sie die verfügbare Version von 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

phpVon der Quelle installieren :

brew install --build-from-source php56

Update :
Wenn Sie bereits installiert phphaben, müssen Sie es vor dem Erstellen aus dem Quellcode deinstallieren. Dies gilt auch für Erweiterungen.


das gleiche hier gerade jetzt - was genau ist passiert? Brew aktualisiert libjpeg und es ist jetzt nicht in der richtigen Version für PHP5.6?
Toby

Übrigens. Ihre Antwortausgaben: Warnung: josegonzalez / php / php56 5.6.30_6 ist bereits installiert, sollte es wahrscheinlich zuerst entfernen? scheint beängstigend: P
Toby

Ja, Sie müssen phpdie Erweiterungen deinstallieren . Dann installieren phpmit --build-from-source. Ich habe mir die Git-Geschichte der libjpegFormel angesehen und die Version von libjpegwurde 9bam 5. August aktualisiert .
Paweł Wacławczyk

schön, das hat es irgendwie kaputt gemacht ... nun, das Kompilieren ist fertig. es scheint, dass es jetzt wieder funktioniert - danke :)
Toby

Dies funktionierte auch für PHP 7.1, einfach deinstallieren und dann ausführen brew install --build-from-source php71. Das Problem trat heute Abend nach dem Laufen für mich auf brew upgrade.
Dwight

6

Ich hatte das gleiche Problem und löste es, indem ich das libjpeg tarball manuallu von hier herunterlud und ausführte :

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

Das gleiche Problem wurde für mich behoben, obwohl die kompilierte Version jetzt v8d sein sollte und diese libtool-Dateien auf meinem System nicht vorhanden sind (noch funktioniert).
Christoph Burschka

Das Problem wurde auch für mich behoben. Vielen Dank!
Roni Laukkarinen

6

Beim Versuch, ein Upgrade durchzuführen, trat ein ähnliches Problem auf composer:

dyld: Bibliothek nicht geladen: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Referenziert von: / usr / local / bin / php
Grund: Bild nicht gefunden
Komponist: PHP Phar-Unterstützung ist für diese Formel erforderlich
Fehler: Eine nicht erfüllte Anforderung hat diesen Build nicht bestanden.

Problem war, phpkonnte keine libjpegBibliothek mehr finden. Eine Möglichkeit, dies zu beheben, besteht darin, phpund neu zu installieren libjpeg. So habe ich sie neu installiert:

# 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

Ich konnte dann alles wieder upgraden :)

brew update && brew upgrade

🍻


6

Eine schmutzige Lösung, die für mich gut funktioniert.

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

5

Der folgende Befehl hat bei mir funktioniert.

brew switch libjpeg 8d

Das hat bei mir funktioniert. Ich habe in meinem Verzeichnis mit ls /usr/local/Cellar/jpeg/zwei Unterverzeichnissen gesucht 8dund 9c da mein Fehler war, dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibmachte es Sinn, dass versucht wurde, das falsche zu laden.
TrophyGeek

4

Ich habe Jirsons Antwort nicht ausprobiert, aber was für mich funktioniert hat, war:

brew uninstall libjpeg
brew install libjpeg

Was machen Sie mit all den Paketen, die von libjpeg abhängig sind? Fehler: Weigert sich, / usr / local / Cellar / jpeg / 9b zu deinstallieren, da dies von [SNIP] benötigt wird, die derzeit installiert sind.
Richard A Quadling

1
@RichardAQuadling Sie können die --ignore-dependenciesOption bei der Deinstallation verwenden.
September

Dies schien das Problem für mich nicht zu lösen. Die neueste JPEG-Version ist derzeit JPEG-9b. libjpeg.8.dylib fehlt noch, nachdem die Anweisungen von @ gwg befolgt wurden.
Gino

3

Ich hatte das gleiche Problem und das einzige, was geholfen hat, war die Verwendung des --build-from-sourceParameters:

brew install php70 --build-from-source

2

Ich hatte auch dieses Problem. Ich habe es folgendermaßen gelöst: Jpeg / 8b deinstallieren:

brew uninstall --ignore-dependencies libjpeg

Jpeg / 9b deinstallieren:

brew uninstall --ignore-dependencies jpeg

Deinstallieren Sie jpeg / 8b und 9b

Installieren Sie jpeg / 9b erneut

brew install jpeg

Installieren Sie jpeg / 9b erneut


ARBEITET, ja !!
Husam

1

Ich teile dies, da ich das gleiche Problem bei der Verwendung von PHP5.4 hatte. Ursprünglich hatte ich PHP5.6 und es funktionierte gut. Dann habe ich ein Downgrade auf PHP5.4 durchgeführt, da meine App nur PHP5.4 unterstützt.

Dann trat dieser Fehler auf. Mir ist aufgefallen, dass ich habe libjpeg.9.dylibund PHP5.4 sucht libjpeg.8.dylib.

Durch Folgendes wurde das Problem behoben:

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


0

Wie @lifecom feststellt, wird dies mit dem php70-Update von homebrew behoben, aber Sie könnten trotzdem auf das Problem stoßen, wenn brew upgrade versuchen, andere Pakete vor dem Upgrade von php70 zu aktualisieren.

Beheben brew upgrade php70Sie dies, indem Sie php70 zuerst manuell mit aktualisieren und dann sollten Sie in der Lage sein, brew upgradekein Problem auszuführen (oder zumindest ohne dieses Problem).



0

In einigen Fällen, insbesondere in Catalina, ist das Homebrew-Fass für die Verpackung möglicherweise vorhanden, jedoch nicht ordnungsgemäß verknüpft. In diesem Fall versuchen Sie:

brew link libjpeg
brew reinstall php --build-from-source
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.