Dyld: библиотека не загружена:/usr/local/lib/libjpeg.8.dylib - homebrew php
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
Любые предложения?
Ответы
Ответ 1
Как было предложено @jirson-tavera в проблемах с репортом homebrew-php, это можно устранить без переопределения вашей установки 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
Ответ 2
Несмотря на то, что решение в принятом ответе работает, это не правильный способ устранить проблему. Он нарушает целостность метаданных brew.
Проблема
Проблема в том, что формула Homebrew jpeg
была обновлена до версии v9, но существующая "разлитая по бутылкам" формула PHP по-прежнему построена и связана с предыдущей версией v8, которая больше не существует в вашей системе.
У вас есть несколько вариантов устранения проблемы.
1. Перекомпилировать формулу phpxx
из источника (рекомендуется)
Удалите вашу php-формулу и перестройте ее из источника вместо использования в бутылковой версии. Таким образом, php будет использовать и связываться с текущей установленной версией jpeg
. Предполагая, что вы имеете дело с php71
:
brew reinstall php71 --build-from-source
2. Снизьте jpeg
формулу правильного пути (рекомендуется)
Если вы не запустили brew cleanup
, вы уже получили предыдущую версию jpeg
в своем подвале brew, переключитесь на нее:
brew switch jpeg 8d
Если вы получили ошибку jpeg does not have a version "8d" in the Cellar.
, вам нужно сначала восстановить ее, вернув историю:
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
Вы можете узнать хеш фиксации, используя brew log jpeg
и просматривая сообщения фиксации.
Недостатком является то, что могут быть другие формулы, которые требуют, чтобы более новая версия работала должным образом, например. imagemagick
. Если вы столкнулись с такими проблемами несовместимости, проверьте первое решение выше.
3. Понизить jpeg
путем перекомпиляции вручную (не рекомендуется)
Извлеките исходный код, скомпилируйте и перезапишите версию brew. Подробнее см. В Denis '.
Это не рекомендуется, поскольку это нарушает целостность ваших метаданных brew. brew думает, что у него есть версия 8b, однако вы вручную скомпилировали 9b и перезаписали файлы.
4. Вручную ссылайтесь на старую версию (не рекомендуется)
Не ручная символическая ссылка остатка libjpeg.8.dylib
. Если файл есть, вы можете просто brew switch
к нему, как указано во втором решении выше.
Это просто худший взлом.
В конечном итоге проблема будет исправлена .
Ответ 3
Сегодня я столкнулся с подобной проблемой. Причиной проблемы стала более новая версия libjpeg
. И решение, которое работало, заключалось в создании php
бутылки из источника.
Проверить доступную версию 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
Установите php
из источника:
brew install --build-from-source php56
Обновление:
Если вы уже установили php
, вам необходимо удалить его до создания из источника. Это также относится к расширениям.
Ответ 4
У меня была та же проблема, и я решил ее, загрузив libjpeg tarball manuallu из здесь и выполнив:
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
Ответ 5
Я не пробовал ответить Jirson, но то, что сработало для меня, было:
brew uninstall libjpeg
brew install libjpeg
Ответ 6
У меня возникла аналогичная проблема с обновлением composer
:
dyld: библиотека не загружена:/usr/local/opt/jpeg/lib/libjpeg.8.dylib
Ссылка из:/usr/local/bin/php
Причина: изображение не найдено
композитор: для этой формулы требуется поддержка PHP Phar
Ошибка: неудовлетворенное требование не удалось выполнить эту сборку.
Проблема была php
больше не могла найти библиотеку libjpeg
. Один из способов исправить это - переустановить php
и libjpeg
. Вот как я их переустановил:
# 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
Затем я смог обновить все снова:)
brew update && brew upgrade
🍻
Ответ 7
У меня была такая же проблема, и единственное, что помогло, это использовать параметр --build-from-source
:
brew install php70 --build-from-source
Ответ 8
Я делюсь этим, поскольку у меня была такая же проблема при использовании PHP5.4. Первоначально у меня был PHP5.6, и он работал нормально. Затем я понизился до php5.4, так как мое приложение поддерживает только PHP5.4.
Затем эта ошибка появилась. Я заметил, что у меня libjpeg.9.dylib
и PHP5.4 ищет libjpeg.8.dylib
.
Выполнение следующей задачи:
brew uninstall php54
brew install --build-from-source php54
Ответ 9
Homebrew php обновлен и больше не проблема с libjpeg
Ответ 10
Как отмечает @lifecom, это исправлено с обновлением homeprew php70, но вы все равно можете столкнуться с проблемой, если brew upgrade
пытается обновить другие пакеты перед обновлением php70.
Исправить это, вручную обновив php70 сначала с помощью brew upgrade php70
, и тогда вы должны иметь возможность запускать brew upgrade
без проблем (или, ну, по крайней мере, без этой проблемы).
Ответ 11
У меня была и эта проблема. Я решил это так:
Удаление jpeg/8b:
brew uninstall --ignore-dependencies libjpeg
Удалить jpeg/9b:
brew uninstall --ignore-dependencies jpeg
![Удалить jpeg/8b и 9b]()
Установите jpeg/9b
brew install jpeg
![Переустановить jpeg/9b]()