dyld: biblioteca no cargada: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP no me estaba funcionando porque estaba encontrando este problema de libpng , así que reinstalé una nueva versión con Homebrew.

Sin embargo, recibo un error similar con libjpegeste tiempo:

$ 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

¿Alguna sugerencia?


¿Cuál es la salida de brew doctory brew list?
IKavanagh

Respuestas:


250

Como lo propuso @ jirson-tavera en el problema del repositorio homebrew-php , esto se puede solucionar sin anular la instalación de su preparación:

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
Además de tal vez agregar una línea impar para la limpieza, esta debería ser la respuesta aceptada ...
Koen Betsens

También funcionó para mí. Gracias.
Adrian Lynch

Me funcionó a mi también. Salud.
Eduardo Leggiero

19
En su lugar, considere hacerlo de la manera correcta .
septiembre

gracias funciona, tengo el mismo problema después de instalar rabbitmq
Omar Makled

167

Aunque la solución en la respuesta aceptada funciona, no es la forma correcta de solucionar el problema. Viola la integridad de los metadatos de brew.

Problema

El problema es que la jpegfórmula de Homebrew se ha actualizado a v9, pero la fórmula PHP "embotellada" existente todavía está construida y vinculada a la versión anterior, v8, que ya no existe en su sistema.

Tiene algunas opciones para solucionar el problema.

1. Vuelva a compilar la phpxxfórmula de origen (muy recomendable)

Desinstale su fórmula php y vuelva a generarla desde la fuente en lugar de usar la versión embotellada. De esta manera, php usará y se vinculará con la versión actualmente instalada de jpeg. Suponiendo que está tratando con php71:

brew reinstall php71 --build-from-source

2. Degradar la jpegfórmula de la manera correcta (es preferible que volver a compilarla manualmente)

Si no ha ejecutado brew cleanup, ya tiene la jpegversión anterior en la bodega de su cerveza, cámbiela:

brew switch jpeg 8d

Si recibe un jpeg does not have a version "8d" in the Cellar.error, primero debe restaurarlo revirtiendo el historial:

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

Puede averiguar el hash de confirmación utilizando brew log jpegy revisando los mensajes de confirmación.

La desventaja es que puede haber otras fórmulas que requieran que la versión más nueva funcione correctamente, por ejemplo imagemagick. Si tiene problemas de incompatibilidad, consulte la primera solución anterior.

3. Cambie de categoría jpegmediante la recompilación manual (no recomendado)

Obtenga la fuente, compile y sobrescriba la versión de brew. Consulte la respuesta de Denis para obtener más detalles.

Esto no se recomienda porque viola la integridad de sus metadatos de preparación. Brew cree que tiene la versión 8b, sin embargo, usted compiló manualmente 9b y sobrescribió los archivos.

4. Enlace simbólico manual a la versión anterior (¿en serio?)

No enlace simbólicamente manualmente las sobras libjpeg.8.dylib. Si el archivo está allí, puede brew switchhacerlo como se menciona en la segunda solución anterior.

Es el peor truco que puedes hacer aquí.


Estos problemas se solucionarán eventualmente .


4
Esta debería ser la respuesta aceptada casi de manera positiva.
Mike Legacy

El primer método funcionó para mí; sin embargo, también tuve que ejecutar xcode-select --installantes de poder reinstalar PHP 7.1 desde la fuente.
jrdn

El método 2 ya no encuentra el compromiso, tal vez debido a los empujes forzados. Una solución alternativa: en lugar de git checkout b231469hacerlo curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, luego en lugar de git checkout masterescribir git checkout Formula/jpeg.rb.
tuomassalo

@tuomassalo Gracias por compartir su solución. La confirmación todavía existe en mi clon local. Si se debió a un empujón forzado, tampoco pudo recuperarlo con curl. Para mí, parece que su clon local de alguna manera no está actualizado con el control remoto 🤔.
septiembre

2
si git checkout b231469obtiene un error, intente esto primerogit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Hoy encontré un problema similar. La causa del problema fue una versión más reciente de libjpeg. Y la solución que funcionó fue construir la phpbotella desde la fuente.

Consulte la versión 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

Instalar phpdesde la fuente:

brew install --build-from-source php56

Actualización :
si ya lo ha instalado php, debe desinstalarlo antes de compilar desde la fuente. También se aplica a las extensiones.


lo mismo aquí ahora, ¿qué pasó exactamente? brew actualizó libjpeg y ahora no está en la versión correcta para php5.6?
Toby

por cierto. sus salidas de respuesta: Advertencia: josegonzalez / php / php56 5.6.30_6 ya está instalado probablemente debería eliminarlo primero? parece aterrador: P
Toby

Sí, tienes que desinstalar phpy las extensiones. Luego instale phpcon --build-from-source. Revisé el historial de git de la libjpegfórmula y la versión de libjpegse actualizó 9bel 5 de agosto.
Paweł Wacławczyk

bueno, así que esto de alguna manera lo rompió ... bueno, la compilación está lista. parece que funciona de nuevo ahora - gracias :)
Toby

Esto también funcionó para PHP 7.1, simplemente desinstale y luego ejecute brew install --build-from-source php71. El problema surgió para mí esta noche después de correr brew upgrade.
Dwight

6

Tuve el mismo problema y lo resolví descargando el libjpeg tarball manuallu desde aquí y ejecutando:

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

Se solucionó el mismo problema para mí, aunque la versión compilada debería ser v8d ahora, y esos archivos libtool no existen en mi sistema (aún funcionan).
Christoph Burschka

También me solucionó el problema. ¡Gracias!
Roni Laukkarinen

6

Estaba teniendo un problema similar al intentar actualizar composer:

dyld: Biblioteca no cargada: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Referencia de: / usr / local / bin / php
Razón: imagen no encontrada
compositor: Se requiere soporte PHP Phar para esta fórmula
Error: Un requisito insatisfecho falló en esta compilación.

El problema era que phpya no podía encontrar la libjpegbiblioteca. Una forma de solucionar este problema es reinstalar phpy libjpeg. Así es como los reinstalé:

# 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

Luego pude actualizar todo nuevamente :)

brew update && brew upgrade

🍻


6

Una solución sucia, que funciona bien para mí.

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

5

Seguir el comando funcionó para mí.

brew switch libjpeg 8d

Esto funcionó para mí. Busqué en mi directorio usando ls /usr/local/Cellar/jpeg/y vi dos subdirectorios 8dy 9c dado que mi error fue dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib, tenía sentido que estaba tratando de cargar el incorrecto.
TrophyGeek

4

No probé la respuesta de Jirson, pero lo que funcionó para mí fue:

brew uninstall libjpeg
brew install libjpeg

¿Qué haces con todos los paquetes que dependen de libjpeg? Error: Negarse a desinstalar / usr / local / Cellar / jpeg / 9b porque lo requiere [SNIP], que está instalado actualmente.
Richard A Quadling

1
@RichardAQuadling Puede utilizar la --ignore-dependenciesopción al desinstalar.
2017

Esto no pareció resolver el problema para mí. La última versión de jpeg es actualmente jpeg-9b. libjpeg.8.dylib aún falta después de seguir las instrucciones de @ gwg.
Gino

3

Estaba teniendo el mismo problema y lo único que ayudó fue usar el --build-from-sourceparámetro:

brew install php70 --build-from-source

2

También tuve este problema. Lo resolví de esta manera: Desinstalar jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Desinstale jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Desinstalar jpeg / 8b y 9b

Vuelva a instalar jpeg / 9b

brew install jpeg

Vuelva a instalar jpeg / 9b


FUNCIONADO, ¡¡Sí !!
Husam

1

Estoy compartiendo esto porque tuve el mismo problema al usar PHP5.4. Originalmente, tenía PHP5.6 y funcionaba bien. Luego bajé a php5.4 ya que mi aplicación solo es compatible con PHP5.4.

Entonces surgió este error. Me di cuenta de que tengo libjpeg.9.dyliby PHP5.4 está buscando libjpeg.8.dylib.

Hacer lo siguiente solucionó el problema:

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

0

Homebrew php se ha actualizado y ya no es un problema con libjpeg


0

Como señala @lifecom, esto se soluciona con la actualización php70 de homebrew, pero aún puede tener el problema si brew upgrade está tratando de actualizar otros paquetes antes de actualizar php70.

Solucione esto actualizando manualmente php70 primero con brew upgrade php70y luego debería poder ejecutar brew upgradesin problemas (o, bueno, al menos sin este problema).



0

En algunos casos, especialmente en Catalina, el barril Homebrew para el paquete puede existir pero no estar correctamente vinculado. En ese caso, intente:

brew link libjpeg
brew reinstall php --build-from-source
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.