dyld: Biblioteca não carregada: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP não estava funcionando para mim porque eu estava encontrando esse problema de libpng , então reinstalei uma nova versão com o Homebrew.

No entanto, estou recebendo um erro semelhante com libjpegeste tempo:

$ 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

Alguma sugestão?


Qual é a saída de brew doctore brew list?
IKavanagh

Respostas:


250

Conforme proposto por @ jirson-tavera no problema do repositório homebrew-php , isso pode ser corrigido sem substituir a instalação do brew:

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
Além de talvez adicionar uma linha estranha para limpeza, esta deve ser a resposta aceita ...
Koen Betsens

Funcionou para mim também. Obrigado.
Adrian Lynch

Funcionou para mim também. Felicidades.
Eduardo Leggiero

19
Considere fazer isso da maneira certa .
setembro de

obrigado trabalhos, eu tive o mesmo problema após instalar o rabbitmq
Omar Makled

167

Mesmo que a solução na resposta aceita funcione, não é a maneira certa de resolver o problema. Isso viola a integridade dos metadados do brew.

Problema

O problema é que a jpegfórmula do Homebrew foi atualizada para a v9, mas a fórmula PHP "engarrafada" existente ainda é construída e vinculada à versão anterior, v8, que não existe mais em seu sistema.

Você tem algumas opções para corrigir o problema.

1. Recompilar a phpxxfórmula da fonte (altamente recomendado)

Desinstale sua fórmula php e reconstrua-a a partir da fonte em vez de usar a versão engarrafada. Dessa forma, o php usará e vinculará a versão atualmente instalada do jpeg. Supondo que você esteja lidando com php71:

brew reinstall php71 --build-from-source

2. Faça downgrade da jpegfórmula da maneira certa (preferível a recompilá-la manualmente)

Se você não correu brew cleanup, você já tem a jpegversão anterior na adega da sua cerveja, mude para ela:

brew switch jpeg 8d

Se receber um jpeg does not have a version "8d" in the Cellar.erro, primeiro você precisa restaurá-lo, revertendo o histórico:

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

Você pode descobrir o hash de commit usando brew log jpege examinando as mensagens de commit.

A desvantagem é que pode haver outras fórmulas que requerem que a versão mais recente funcione corretamente, por exemplo imagemagick. Se você enfrentar esses problemas de incompatibilidade, verifique a primeira solução acima.

3. Downgrade jpegrecompilando manualmente (não recomendado)

Busque o código-fonte, compile e sobrescreva a versão do brew. Consulte a resposta de Denis para obter detalhes.

Isso não é recomendado porque viola a integridade dos metadados do seu brew. Brew acha que tem a versão 8b, no entanto, você compilou manualmente o 9b e substituiu os arquivos.

4. Link simbólico manualmente para a versão antiga (sério?)

Não vincule manualmente o que sobrou libjpeg.8.dylib. Se o arquivo estiver lá, você pode acessá brew switch-lo conforme mencionado na segunda solução acima.

É apenas o pior hack que você pode fazer aqui.


Esses problemas serão eventualmente corrigidos .


4
Esta deve ser a resposta aceita quase positivamente.
Mike Legacy,

O primeiro método funcionou para mim - no entanto, eu também tive que executar xcode-select --installantes de poder reinstalar o PHP 7.1 do código-fonte.
junho de

Método 2 não encontra mais o commit, talvez por causa de push push. Uma solução alternativa: em vez de git checkout b231469eu fiz curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, então em vez de git checkout mastereu escrevi git checkout Formula/jpeg.rb.
tuomassalo

@tuomassalo Obrigado por compartilhar sua solução alternativa. O commit ainda existe em meu clone local. Se foi devido a um push forçado, você também não conseguiu buscá-lo curl. Para mim, parece que o seu clone local não está atualizado com o controle remoto 🤔.
setembro

2
se git checkout b231469obtiver um erro, tente este primeirogit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Eu encontrei um problema semelhante hoje. A causa do problema era uma versão mais recente do libjpeg. E a solução que funcionou foi construir a phpgarrafa a partir da fonte.

Verifique a versão disponível 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

Instale phpda fonte:

brew install --build-from-source php56

Atualizar :
Se você já instalou, phpvocê deve desinstalá-lo antes de compilar a partir do código-fonte. Também se aplica a extensões.


mesmo aqui agora - o que aconteceu exatamente? brew atualizou o libjpeg e agora não está na versão correta para php5.6?
Toby

btw. sua resposta sai: Aviso: josegonzalez / php / php56 5.6.30_6 já está instalado provavelmente deve removê-lo primeiro? parece assustador: P
Toby

Sim, você tem que desinstalar phpe as extensões. Em seguida, instale phpcom --build-from-source. Eu olhei o histórico do git da libjpegfórmula e a versão libjpegfoi atualizada 9bem 5 de agosto.
Paweł Wacławczyk

legal então isso de alguma forma quebrou ... bem, a compilação está feita. parece que funciona de novo agora - obrigado :)
Toby

Isso funcionou para o PHP 7.1 também, basta desinstalar e executar brew install --build-from-source php71. O problema surgiu para mim esta noite depois de correr brew upgrade.
Dwight

6

Eu tive o mesmo problema e resolvi baixando o manuallu tarball libjpeg daqui e executando:

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

Corrigido o mesmo problema para mim, embora a versão compilada deva ser v8d agora, e esses arquivos libtool não existem em meu sistema (ainda funcionou).
Christoph Burschka

Resolvido o problema para mim também. Obrigado!
Roni Laukkarinen

6

Eu estava tendo um problema semelhante ao tentar fazer o upgrade composer:

dyld: Biblioteca não carregada: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Referenciado em: / usr / local / bin / php
Razão: imagem não encontrada
composer: Suporte PHP Phar é necessário para esta fórmula
Erro: Um requisito não satisfeito falhou nesta compilação.

O problema era phpque não conseguia mais encontrar a libjpegbiblioteca. Uma maneira de corrigir isso é reinstalar phpe libjpeg. Veja como eu os reinstalei:

# 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

Eu pude atualizar tudo novamente :)

brew update && brew upgrade

🍻


6

Uma solução suja, que funciona bem para mim.

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

5

Seguir o comando funcionou para mim.

brew switch libjpeg 8d

Isso funcionou para mim. Olhei em meu diretório usando ls /usr/local/Cellar/jpeg/e vi dois subdiretórios 8de 9c Como meu erro foi, dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibfazia sentido tentar carregar o errado.
TrophyGeek

4

Não tentei a resposta de Jirson, mas o que funcionou para mim foi:

brew uninstall libjpeg
brew install libjpeg

O que você faz com todos os pacotes que dependem da libjpeg? Erro: recusar desinstalar / usr / local / Cellar / jpeg / 9b porque é exigido pelo [SNIP], que está instalado atualmente.
Richard A Quadling de

1
@RichardAQuadling Você pode usar a --ignore-dependenciesopção ao desinstalar.
setembro de

Isso não pareceu resolver o problema para mim. A última versão jpeg é atualmente jpeg-9b. libjpeg.8.dylib ainda está faltando após seguir as instruções de @ gwg.
Gino

3

Eu estava com o mesmo problema e a única coisa que ajudou foi usar o --build-from-sourceparâmetro:

brew install php70 --build-from-source

2

Eu também tive esse problema. Eu resolvi desta forma: Desinstale jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Desinstalar jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Desinstalar jpeg / 8b e 9b

Reinstalar jpeg / 9b

brew install jpeg

Reinstale jpeg / 9b


TRABALHOU, sim !!
Husam

1

Estou compartilhando isso porque tive o mesmo problema ao usar o PHP5.4. Originalmente, eu tinha o PHP5.6 e estava funcionando bem. Então eu fiz downgrade para php5.4, pois meu aplicativo só suporta PHP5.4.

Então este erro apareceu. Eu percebi que o libjpeg.9.dylibPHP5.4 está procurandolibjpeg.8.dylib .

Fazer o seguinte resolveu o problema:

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

0

O homebrew php foi atualizado e não é mais um problema com a libjpeg


0

Como observou @lifecom, isso foi corrigido com a atualização do php70 do homebrew, mas você ainda pode ter o problema se brew upgrade estiver tentando atualizar outros pacotes antes de atualizar o php70.

Corrija isso atualizando manualmente o php70 primeiro com brew upgrade php70e então não será possível executar brew upgradenenhum problema (ou, bem, pelo menos sem esse problema).



0

Em alguns casos, especialmente em Catalina, o barril Homebrew para o pacote pode existir, mas não estar devidamente vinculado. Nesse caso, tente:

brew link libjpeg
brew reinstall php --build-from-source
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.