PHP nie działało, ponieważ napotkałem problem z libpng , więc ponownie zainstalowałem nową wersję z Homebrew.
Jednak libjpeg
tym 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?
brew doctor
ibrew list
?Odpowiedzi:
Zgodnie z propozycją @ jirson-tavera w problemie repozytorium homebrew-php , można to naprawić bez nadpisywania instalacji brew:
źródło
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
phpxx
formułę 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 zphp71
:2. Zmień
jpeg
formułę 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ąjpeg
wersję w piwnicy swojego naparu, przełącz się na nią:Jeśli pojawi się
jpeg does not have a version "8d" in the Cellar.
błąd, musisz go najpierw przywrócić, przywracając historię: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
jpeg
przez 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 .
źródło
xcode-select --install
zanim mogłem ponownie zainstalować PHP 7.1 ze źródła.git checkout b231469
zrobiłemcurl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb
, to zamiastgit checkout master
napisałemgit checkout Formula/jpeg.rb
.curl
. Wydaje mi się, że twój lokalny klon jest w jakiś sposób nieaktualny z pilotem 🤔.git checkout b231469
pojawi się błąd, spróbuj najpierw tegogit -C "$(brew --repo homebrew/core)" fetch --unshallow
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
:Zainstaluj
php
ze źródła:Aktualizacja :
Jeśli już zainstalowałeś
php
, musisz odinstalować go przed budowaniem ze źródła. Dotyczy to również rozszerzeń.źródło
php
i rozszerzenia. Następnie zainstaluj zaphp
pomocą--build-from-source
. Przyjrzałem się historiilibjpeg
formuły git i wersji programulibjpeg
została zaktualizowana9b
5 sierpnia.brew install --build-from-source php71
. Problem pojawił się dziś wieczorem po biegubrew upgrade
.Miałem ten sam problem i rozwiązać go pobierając libjpeg tarball manuallu od tutaj i działa:
źródło
Otrzymałem podobny problem podczas próby aktualizacji
composer
:Problem polegał na tym,
php
że nie można już znaleźćlibjpeg
biblioteki. Jednym ze sposobów rozwiązania tego problemu jest ponowna instalacjaphp
ilibjpeg
. Oto jak je ponownie zainstalowałem:Wtedy mogłem wszystko ponownie zaktualizować :)
🍻
źródło
Brudne rozwiązanie, które działa dobrze dla mnie.
źródło
Następujące polecenie zadziałało dla mnie.
źródło
ls /usr/local/Cellar/jpeg/
i zobaczyłem dwa podkatalogi,8d
a9c
ponieważ mój błąd był taki,dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
to miało sens, że próbowałem załadować niewłaściwy.Nie próbowałem odpowiedzi Jirson, ale zadziałało dla mnie:
źródło
--ignore-dependencies
opcji podczas odinstalowywania.Miałem ten sam problem i jedyną rzeczą, która pomogła, było użycie
--build-from-source
parametru:źródło
Miałem też ten problem. Rozwiązałem to w ten sposób: Odinstaluj jpeg / 8b:
Odinstaluj jpeg / 9b:
Zainstaluj ponownie jpeg / 9b
źródło
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.dylib
a PHP5.4 szukalibjpeg.8.dylib
.Wykonanie następujących czynności rozwiązało problem:
źródło
PHP Homebrew zostało zaktualizowane i nie stanowi już problemu z libjpeg
źródło
Jak zauważa @lifecom, zostało to naprawione w aktualizacji php70 homebrew, ale nadal możesz napotkać problem, jeśli
brew upgrade
próbujesz zaktualizować inne pakiety przed aktualizacją php70.Napraw to, ręcznie aktualizując najpierw php70 za pomocą,
brew upgrade php70
a następnie powinieneś być w stanie uruchomićbrew upgrade
bez problemu (lub przynajmniej bez tego problemu).źródło
Valet - Mac z php7.1
źródło
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:
źródło