PHP не работал у меня, так как я столкнулся с этой проблемой libpng , поэтому я переустановил новую версию с Homebrew.
Однако на libjpeg
этот раз я получаю аналогичную ошибку :
$ 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
Какие-либо предложения?
brew doctor
иbrew list
?Ответы:
Как было предложено @ jirson-tavera в проблеме репозитория homebrew-php , это можно исправить, не отменяя установку brew:
источник
Несмотря на то, что решение в принятом ответе работает, это неправильный способ решить проблему. Это нарушает целостность метаданных пива.
проблема
Проблема в том, что
jpeg
формула Homebrew была обновлена до v9, но существующая «бутылочная» формула PHP все еще построена и связана с предыдущей версией v8, которой больше нет в вашей системе.У вас есть несколько вариантов решения проблемы.
1. Перекомпилируйте
phpxx
формулу из исходного кода (настоятельно рекомендуется)Удалите формулу php и перестройте ее из исходного кода вместо использования версии в бутылках. Таким образом, php будет использовать текущую установленную версию
jpeg
. Предполагая, что вы имеете дело сphp71
:2. Верните
jpeg
формулу на более раннюю версию (лучше, чем перекомпилировать ее вручную)Если вы еще не запускали
brew cleanup
, значит, у вас уже есть предыдущаяjpeg
версия в погребе, переключитесь на нее:Если вы получили
jpeg does not have a version "8d" in the Cellar.
ошибку, вам нужно сначала восстановить ее, вернув историю:Вы можете узнать хэш фиксации, используя
brew log jpeg
и просматривая сообщения фиксации.Обратной стороной является то, что могут быть другие формулы, требующие правильной работы более новой версии, например
imagemagick
. Если вы столкнулись с такими проблемами несовместимости, проверьте первое решение выше.3. Перейти
jpeg
на более раннюю версию путем перекомпиляции вручную (не рекомендуется)Получить исходный код, скомпилировать и перезаписать версию brew. Обратитесь к ответу Дениса для деталей.
Это не рекомендуется, поскольку это нарушает целостность метаданных вашего пива. Брю считает, что у него версия 8b, однако вы вручную скомпилировали 9b и перезаписали файлы.
4. Вручную сделать символическую ссылку на старую версию (серьезно?)
Не создавайте вручную символических ссылок на оставшееся
libjpeg.8.dylib
. Если файл есть, вы можете простоbrew switch
к нему, как указано во втором решении выше.Это просто худший взлом, который вы можете здесь сделать.
Такие проблемы со временем будут исправлены .
источник
xcode-select --install
прежде чем я смог переустановить PHP 7.1 из исходников.git checkout b231469
я сделалcurl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb
, то вместо того , чтобыgit checkout master
я написалgit checkout Formula/jpeg.rb
.curl
. Мне кажется, что ваш локальный клон почему-то не обновлен с удаленным 🤔.git checkout b231469
возникает ошибка, сначала попробуйте этоgit -C "$(brew --repo homebrew/core)" fetch --unshallow
Сегодня столкнулся с подобной проблемой. Причиной проблемы была более новая версия
libjpeg
. И решение, которое сработало, заключалось в созданииphp
бутылки из исходного кода.Проверить доступную версию
libjpeg
:Установить
php
из исходников:Обновление :
если вы уже установили,
php
вам необходимо удалить его перед сборкой из исходников. Это также относится к расширениям.источник
php
и расширения. Затем установитеphp
с помощью--build-from-source
. Я просмотрел историюlibjpeg
формулы git, и версияlibjpeg
была обновлена до9b
5 августа.brew install --build-from-source php71
. Проблема возникла у меня сегодня вечером после пробежкиbrew upgrade
.У меня была такая же проблема, и я решил ее, загрузив tarball manuallu libjpeg отсюда и запустив:
источник
У меня возникла аналогичная проблема при обновлении
composer
:Проблема заключалась в том, что
php
не удалось найтиlibjpeg
библиотеку. Один из способов исправить это - переустановитьphp
иlibjpeg
. Вот как я их переустановил:Затем я снова смог все обновить :)
🍻
источник
Грязное решение, которое мне подходит.
источник
У меня сработала следующая команда.
источник
ls /usr/local/Cellar/jpeg/
и увидел два подкаталога,8d
и,9c
поскольку моя ошибка была в том, чтоdyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
это имело смысл, я пытался загрузить не тот.Я не пробовал ответить Джирсона, но для меня сработало:
источник
--ignore-dependencies
опцию при удалении.У меня была та же проблема, и единственное, что помогло, - это использовать
--build-from-source
параметр:источник
У меня тоже была эта проблема. Я решил это так: Удалите jpeg / 8b:
Удалите jpeg / 9b:
Переустановите jpeg / 9b
источник
Я разделяю это, так как у меня была такая же проблема при использовании PHP5.4. Изначально у меня был PHP5.6, и он работал нормально. Затем я перешел на php5.4, поскольку мое приложение поддерживает только PHP5.4.
Потом возникла эта ошибка. Заметил что есть
libjpeg.9.dylib
и ищет PHP5.4libjpeg.8.dylib
.Выполнение следующих действий решило проблему:
источник
Homebrew php обновлен и больше не проблема с libjpeg
источник
Как отмечает @lifecom, это исправлено с обновлением php70 homebrew, но вы все равно можете столкнуться с проблемой, если
brew upgrade
пытаетесь обновить другие пакеты перед обновлением php70.Исправьте это, сначала вручную обновив php70,
brew upgrade php70
и тогда вы сможете работатьbrew upgrade
без проблем (или, по крайней мере, без этой проблемы).источник
Valet - mac с php7.1
источник
В некоторых случаях, особенно в Catalina, бочка Homebrew для пакета может существовать, но не связана должным образом. В таком случае попробуйте:
источник