dyld: Biblioteka nie została załadowana: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP nie działało, ponieważ napotkałem problem z libpng , więc ponownie zainstalowałem nową wersję z Homebrew.

Jednak libjpegtym razem otrzymuję podobny błąd :

$ 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

Jakieś sugestie?


Jaki jest wynik brew doctori brew list?
IKavanagh

Odpowiedzi:


250

Zgodnie z propozycją @ jirson-tavera w problemie repozytorium homebrew-php , można to naprawić bez nadpisywania instalacji 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
Poza tym może dodanie nieparzystej linii do porządkowania, powinna to być akceptowana odpowiedź ...
Koen Betsens

U mnie też zadziałało. Dzięki.
Adrian Lynch,

U mnie też zadziałało. Twoje zdrowie.
Eduardo Leggiero

19
Zamiast tego rozważ zrobienie tego we właściwy sposób .
wrzesień

dzięki działa, mam ten sam problem po zainstalowaniu rabbitmq
Omar Makled

167

Mimo że rozwiązanie w zaakceptowanej odpowiedzi działa, nie jest to właściwy sposób rozwiązania problemu. Narusza integralność metadanych brew.

Problem

Problem w tym, że Homebrew jpeg formuła została zaktualizowana do v9, ale istniejąca "butelkowa" formuła PHP jest nadal zbudowana i połączona z poprzednią wersją, v8, która nie istnieje już w twoim systemie.

Masz kilka opcji rozwiązania problemu.

1. Ponownie skompiluj phpxxformułę ze źródła (zdecydowanie zalecane)

Odinstaluj formułę php i odbuduj ją ze źródła zamiast używać wersji butelkowanej. W ten sposób php użyje i połączy się z aktualnie zainstalowaną wersją jpeg. Zakładając, że masz do czynienia z php71:

brew reinstall php71 --build-from-source

2. Zmień jpegformułę na starszą wersję we właściwy sposób (preferowane zamiast ręcznej ponownej kompilacji)

Jeśli jeszcze nie biegałeś brew cleanup, masz już poprzednią jpegwersję w piwnicy swojego naparu, przełącz się na nią:

brew switch jpeg 8d

Jeśli pojawi się jpeg does not have a version "8d" in the Cellar.błąd, musisz go najpierw przywrócić, przywracając historię:

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

Możesz znaleźć skrót zatwierdzenia za pomocą brew log jpeg i przeglądając komunikaty o zatwierdzeniach.

Wadą jest to, że mogą istnieć inne formuły, które wymagają poprawnego działania nowszej wersji, np imagemagick . Jeśli napotkasz takie problemy z niekompatybilnością, sprawdź pierwsze rozwiązanie powyżej.

3. Downgrade jpegprzez ręczną rekompilację (niezalecane)

Pobierz źródło, skompiluj i nadpisz wersję brew. Odnosić się do odpowiedzi Denisa .

Nie jest to zalecane, ponieważ narusza integralność metadanych brew. Brew uważa, że ​​ma wersję 8b, jednak ręcznie skompilowałeś 9b i nadpisałeś pliki.

4. Ręcznie dowiązanie symboliczne do starej wersji (poważnie?)

Nie należy ręcznie łączyć symbolicznego pozostałości libjpeg.8.dylib. Jeśli plik tam jest, możesz po prostubrew switch jak wspomniano w drugim rozwiązaniu powyżej.

To po prostu najgorszy hack, jaki możesz tutaj zrobić.


Takie problemy zostaną ostatecznie naprawione .


4
To powinna być przyjęta odpowiedź prawie pozytywna.
Mike Legacy,

Pierwsza metoda zadziałała dla mnie - jednak musiałem również uruchomić, xcode-select --installzanim mogłem ponownie zainstalować PHP 7.1 ze źródła.
jrdn

Metoda 2 nie znajduje już zatwierdzenia, być może z powodu wypychania siły. Obejście: zamiast tego git checkout b231469zrobiłem curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, to zamiast git checkout masternapisałem git checkout Formula/jpeg.rb.
tuomassalo

@tuomassalo Dziękujemy za udostępnienie obejścia. Zatwierdzenie nadal istnieje w moim lokalnym klonie. Jeśli było to spowodowane wymuszonym pchnięciem, nie byłeś w stanie go pobrać za pomocą curl. Wydaje mi się, że twój lokalny klon jest w jakiś sposób nieaktualny z pilotem 🤔.
Sepehr

2
jeśli git checkout b231469pojawi się błąd, spróbuj najpierw tegogit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Dzisiaj spotkałem się z podobnym problemem. Przyczyną problemu była nowsza wersja libjpeg. Rozwiązaniem, które się sprawdziło, było budowaniephp butelki ze źródła.

Sprawdź dostępną wersję 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

Zainstaluj phpze źródła:

brew install --build-from-source php56

Aktualizacja :
Jeśli już zainstalowałeś php, musisz odinstalować go przed budowaniem ze źródła. Dotyczy to również rozszerzeń.


to samo tutaj przed chwilą - co dokładnie się stało? napar zaktualizowany libjpeg i nie jest teraz w odpowiedniej wersji dla php5.6?
Toby

przy okazji. Twoje wyniki odpowiedzi: Ostrzeżenie: josegonzalez / php / php56 5.6.30_6 jest już zainstalowany, prawdopodobnie powinienem go najpierw usunąć? wydaje się przerażające: P
Toby

Tak, musisz odinstalować phpi rozszerzenia. Następnie zainstaluj za phppomocą --build-from-source. Przyjrzałem się historii libjpegformuły git i wersji programu libjpegzostała zaktualizowana 9b5 sierpnia.
Paweł Wacławczyk

fajnie, więc jakoś to zepsuło ... cóż, kompilacja jest zakończona. wygląda na to, że teraz znowu działa - dzięki :)
Toby

Działało to również w przypadku PHP 7.1, po prostu odinstaluj i uruchom brew install --build-from-source php71. Problem pojawił się dziś wieczorem po biegu brew upgrade.
Dwight

6

Miałem ten sam problem i rozwiązać go pobierając libjpeg tarball manuallu od tutaj i działa:

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

Naprawiłem ten sam problem dla mnie, chociaż skompilowana wersja powinna być teraz v8d, a te pliki libtool nie istnieją w moim systemie (nadal działały).
Christoph Burschka,

U mnie też naprawiono problem. Dzięki!
Roni Laukkarinen

6

Otrzymałem podobny problem podczas próby aktualizacji composer:

dyld: Biblioteka nie została załadowana: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Źródło: / usr / local / bin / php
Powód: nie znaleziono obrazu
kompozytor: dla tej formuły wymagana jest obsługa PHP Phar
Błąd: Niespełnione wymaganie nie powiodło się w tej kompilacji.

Problem polegał na tym, phpże nie można już znaleźć libjpegbiblioteki. Jednym ze sposobów rozwiązania tego problemu jest ponowna instalacja phpi libjpeg. Oto jak je ponownie zainstalowałem:

# 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

Wtedy mogłem wszystko ponownie zaktualizować :)

brew update && brew upgrade

🍻


6

Brudne rozwiązanie, które działa dobrze dla mnie.

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

5

Następujące polecenie zadziałało dla mnie.

brew switch libjpeg 8d

To zadziałało dla mnie. Zajrzałem do mojego katalogu przy użyciu ls /usr/local/Cellar/jpeg/i zobaczyłem dwa podkatalogi, 8da 9c ponieważ mój błąd był taki, dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibto miało sens, że próbowałem załadować niewłaściwy.
TrophyGeek

4

Nie próbowałem odpowiedzi Jirson, ale zadziałało dla mnie:

brew uninstall libjpeg
brew install libjpeg

Co robisz ze wszystkimi pakietami zależnymi od libjpeg? Błąd: Odmowa odinstalowania / usr / local / Cellar / jpeg / 9b, ponieważ jest to wymagane przez [SNIP], które są obecnie zainstalowane.
Richard A Quadling

1
@RichardAQuadling Możesz skorzystać z tej --ignore-dependenciesopcji podczas odinstalowywania.
wrzesień

Wydawało się, że to nie rozwiązało problemu. Najnowsza wersja jpeg to obecnie jpeg-9b. Po wykonaniu instrukcji @ gwg nadal brakuje libjpeg.8.dylib.
Gino

3

Miałem ten sam problem i jedyną rzeczą, która pomogła, było użycie --build-from-sourceparametru:

brew install php70 --build-from-source

2

Miałem też ten problem. Rozwiązałem to w ten sposób: Odinstaluj jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Odinstaluj jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Odinstaluj jpeg / 8b i 9b

Zainstaluj ponownie jpeg / 9b

brew install jpeg

Zainstaluj ponownie jpeg / 9b


PRACOWANO, tak !!
Husam

1

Udostępniam to, ponieważ miałem ten sam problem podczas korzystania z PHP5.4. Pierwotnie miałem PHP5.6 i działało dobrze. Potem obniżyłem wersję do php5.4, ponieważ moja aplikacja obsługuje tylko PHP5.4.

Wtedy pojawił się ten błąd. Zauważyłem, że mam libjpeg.9.dyliba PHP5.4 szuka libjpeg.8.dylib.

Wykonanie następujących czynności rozwiązało problem:

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

0

PHP Homebrew zostało zaktualizowane i nie stanowi już problemu z libjpeg


0

Jak zauważa @lifecom, zostało to naprawione w aktualizacji php70 homebrew, ale nadal możesz napotkać problem, jeśli brew upgradepróbujesz zaktualizować inne pakiety przed aktualizacją php70.

Napraw to, ręcznie aktualizując najpierw php70 za pomocą, brew upgrade php70a następnie powinieneś być w stanie uruchomić brew upgradebez problemu (lub przynajmniej bez tego problemu).



0

W niektórych przypadkach, szczególnie w Catalinie, beczka Homebrew dla pakietu może istnieć, ale nie jest poprawnie połączona. W takim przypadku spróbuj:

brew link libjpeg
brew reinstall php --build-from-source
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.