dyld: Bibliothèque non chargée: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP ne fonctionnait pas pour moi car je rencontrais ce problème de libpng , j'ai donc réinstallé une nouvelle version avec Homebrew.

Cependant, j'obtiens une erreur similaire avec libjpegcette heure:

$ 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

Aucune suggestion?


Quelle est la sortie de brew doctoret brew list?
IKavanagh du

Réponses:


250

Comme proposé par @ jirson-tavera dans le problème du repo homebrew-php , cela peut être corrigé sans remplacer votre installation de brassage:

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
En plus d'ajouter peut-être une ligne étrange pour le nettoyage, cela devrait être la réponse acceptée ...
Koen Betsens

A travaillé pour moi aussi. Merci.
Adrian Lynch

A travaillé pour moi aussi. À votre santé.
Eduardo Leggiero

19
Pensez plutôt à le faire de la bonne façon .
sepehr

merci fonctionne, j'ai eu le même problème après avoir installé rabbitmq
Omar Makled

167

Même si la solution dans la réponse acceptée fonctionne, ce n'est pas la bonne façon de résoudre le problème. Cela viole l'intégrité des métadonnées de Brew.

Problème

Le problème est que la jpegformule de Homebrew a été mise à niveau vers la v9, mais la formule PHP «en bouteille» existante est toujours construite et liée à la version précédente, v8, qui n'existe plus sur votre système.

Vous avez quelques options pour résoudre le problème.

1. Recompiler la phpxxformule à partir de la source (fortement recommandé)

Désinstallez votre formule php et reconstruisez-la à partir de la source au lieu d'utiliser la version en bouteille. De cette façon, php utilisera et établira un lien avec la version actuellement installée de jpeg. En supposant que vous avez affaire à php71:

brew reinstall php71 --build-from-source

2. Rétrograder la jpegformule de la bonne manière (préférable de la recompiler manuellement)

Si vous n'avez pas couru brew cleanup, vous avez déjà la jpegversion précédente dans la cave de votre bière, passez-y:

brew switch jpeg 8d

Si vous obtenez une jpeg does not have a version "8d" in the Cellar.erreur, vous devez d'abord la restaurer en rétablissant l'historique:

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

Vous pouvez trouver le hachage de validation en utilisant brew log jpeget en parcourant les messages de validation.

L'inconvénient est qu'il peut y avoir d'autres formules qui nécessitent que la version la plus récente fonctionne correctement, par exemple imagemagick. Si vous rencontrez de tels problèmes d'incompatibilité, vérifiez la première solution ci-dessus.

3. Rétrograder jpegen recompilant manuellement (non recommandé)

Récupérez la source, compilez et écrasez la version de brew. Reportez-vous à la réponse de Denis pour plus de détails.

Ce n'est pas recommandé car cela viole l'intégrité de vos métadonnées de brassage. Brew pense qu'il a la version 8b, cependant, vous avez compilé manuellement 9b et écrasé les fichiers.

4. Reliez manuellement l'ancienne version (sérieusement?)

Ne liez pas manuellement les restes libjpeg.8.dylib. Si le fichier est là, vous pouvez simplement le brew switchfaire comme mentionné dans la deuxième solution ci-dessus.

C'est juste le pire hack que vous puissiez faire ici.


Ces problèmes seront finalement résolus .


4
Cela devrait être la réponse acceptée presque positivement.
Mike Legacy

La première méthode a fonctionné pour moi - cependant, j'ai également dû exécuter xcode-select --installavant de pouvoir réinstaller PHP 7.1 à partir des sources.
jrdn

La méthode 2 ne trouve plus le commit, peut-être à cause des poussées forcées. Une solution de contournement: au lieu de git checkout b231469je l'ai fait curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, alors au lieu de git checkout masterj'ai écrit git checkout Formula/jpeg.rb.
tuomassalo

@tuomassalo Merci d'avoir partagé votre solution de contournement. Le commit existe toujours dans mon clone local. Si cela était dû à une poussée forcée, vous ne pouviez pas le récupérer avec l'un curlou l'autre. Pour moi, il semble que votre clone local ne soit pas à jour avec la télécommande 🤔.
sepehr

2
si vous git checkout b231469obtenez une erreur, essayez d'abord cecigit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

J'ai rencontré le même problème aujourd'hui. La cause du problème était une version plus récente de libjpeg. Et la solution qui a fonctionné était de construire une phpbouteille à partir de la source.

Vérifiez la version disponible de 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

Installer phpdepuis la source:

brew install --build-from-source php56

Mise à jour :
si vous avez déjà installé, phpvous devez le désinstaller avant de construire à partir de la source. Cela s'applique également aux extensions.


même ici tout à l'heure - que s'est-il passé exactement? brew mis à jour libjpeg et ce n'est pas dans la bonne version pour php5.6?
Toby

btw. votre réponse renvoie: Attention: josegonzalez / php / php56 5.6.30_6 est déjà installé devrait probablement le supprimer en premier? semble effrayant: P
Toby

Oui, vous devez désinstaller phpet les extensions. Ensuite, installez phpavec --build-from-source. J'ai regardé dans l'historique git de la libjpegformule et la version de a libjpegété mise à jour 9ble 5 août.
Paweł Wacławczyk

sympa donc cela l'a en quelque sorte cassé ... eh bien, la compilation est terminée. il semble que cela fonctionne à nouveau maintenant - merci :)
Toby

Cela a également fonctionné pour PHP 7.1, il suffit de désinstaller puis d'exécuter brew install --build-from-source php71. Un problème est survenu pour moi ce soir après avoir couru brew upgrade.
Dwight

6

J'ai eu le même problème et je l'ai résolu en téléchargeant le manuallu de l'archive tar libjpeg à partir d' ici et en exécutant:

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

Correction du même problème pour moi, bien que la version compilée devrait être v8d maintenant, et ces fichiers libtool n'existent pas sur mon système (toujours fonctionnels).
Christoph Burschka

Correction du problème pour moi aussi. Merci!
Roni Laukkarinen

6

J'avais un problème similaire en essayant de mettre à niveau composer:

dyld: Bibliothèque non chargée: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Référencé à partir de: / usr / local / bin / php
Raison: image non trouvée
compositeur: Le support PHP Phar est requis pour cette formule
Erreur: Une exigence non satisfaite a échoué cette compilation.

Le problème était phpque la libjpegbibliothèque ne pouvait plus être trouvée . Une façon de résoudre ce problème consiste à réinstaller phpet libjpeg. Voici comment je les ai réinstallés:

# 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

J'ai ensuite pu tout mettre à jour à nouveau :)

brew update && brew upgrade

🍻


6

Une solution sale, qui fonctionne bien pour moi.

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

5

La commande suivante a fonctionné pour moi.

brew switch libjpeg 8d

Cela a fonctionné pour moi. J'ai regardé dans mon répertoire en utilisant ls /usr/local/Cellar/jpeg/et j'ai vu deux sous 8d- répertoires et 9c comme mon erreur était dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib, il était logique d'essayer de charger le mauvais.
TrophyGeek

4

Je n'ai pas essayé la réponse de Jirson, mais ce qui a fonctionné pour moi était:

brew uninstall libjpeg
brew install libjpeg

Que faites-vous avec tous les paquets qui dépendent de libjpeg? Erreur: refus de désinstaller / usr / local / Cellar / jpeg / 9b car il est requis par [SNIP], qui est actuellement installé.
Richard A Quadling

1
@RichardAQuadling Vous pouvez utiliser l' --ignore-dependenciesoption lors de la désinstallation.
sepehr

Cela n'a pas semblé résoudre le problème pour moi. La dernière version jpeg est actuellement jpeg-9b. libjpeg.8.dylib est toujours manquant après avoir suivi les instructions de @ gwg.
Gino

3

J'avais le même problème et la seule chose qui m'aidait était d'utiliser le --build-from-sourceparamètre:

brew install php70 --build-from-source

2

J'ai eu aussi ce problème. Je l'ai résolu de cette manière: Désinstaller jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Désinstallez jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Désinstaller jpeg / 8b et 9b

Réinstaller jpeg / 9b

brew install jpeg

Réinstaller jpeg / 9b


A TRAVAILLÉ, Ouais !!
Husam

1

Je partage cela car j'ai eu le même problème lors de l'utilisation de PHP5.4. À l'origine, j'avais PHP5.6 et cela fonctionnait bien. Ensuite, j'ai rétrogradé à php5.4 car mon application ne prend en charge que PHP5.4.

Puis cette erreur est survenue. J'ai remarqué que je l'ai libjpeg.9.dylibet que PHP5.4 est à la recherche libjpeg.8.dylib.

Faire ce qui suit a réglé le problème:

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

0

Homebrew php a été mis à jour et n'est plus un problème avec libjpeg


0

Comme le note @lifecom, cela est corrigé avec la mise à jour php70 de homebrew, mais vous pouvez toujours rencontrer le problème si vous brew upgradeessayez de mettre à jour d'autres paquets avant de mettre à jour php70.

Corrigez cela en mettant d'abord à jour manuellement php70 avec brew upgrade php70et vous devriez ensuite pouvoir exécuter brew upgradesans problème (ou, du moins, sans ce problème).



0

Dans certains cas, en particulier dans Catalina, le cask Homebrew pour le paquet peut exister mais pas être correctement lié. Dans ce cas, essayez:

brew link libjpeg
brew reinstall php --build-from-source
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.