dyld: библиотека не загружена: /usr/local/lib/libjpeg.8.dylib - homebrew php


109

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?
IKavanagh

Ответы:


250

Как было предложено @ 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

4
Помимо, возможно, добавления нечетной строки для очистки, это должен быть принятый ответ ...
Коэн Бетсенс,

У меня тоже работало. Спасибо.
Адриан Линч,

У меня тоже сработало. Приветствия.
Эдуардо Легжеро

19
Лучше сделайте это правильно .
sepehr

спасибо, работает, у меня такая же проблема после установки rabbitmq
Омар Маклед

167

Несмотря на то, что решение в принятом ответе работает, это неправильный способ решить проблему. Это нарушает целостность метаданных пива.

проблема

Проблема в том, что jpegформула Homebrew была обновлена ​​до v9, но существующая «бутылочная» формула PHP все еще построена и связана с предыдущей версией v8, которой больше нет в вашей системе.

У вас есть несколько вариантов решения проблемы.

1. Перекомпилируйте phpxxформулу из исходного кода (настоятельно рекомендуется)

Удалите формулу php и перестройте ее из исходного кода вместо использования версии в бутылках. Таким образом, php будет использовать текущую установленную версию jpeg. Предполагая, что вы имеете дело с php71:

brew reinstall php71 --build-from-source

2. Верните jpegформулу на более раннюю версию (лучше, чем перекомпилировать ее вручную)

Если вы еще не запускали brew cleanup, значит, у вас уже есть предыдущая jpegверсия в погребе, переключитесь на нее:

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. Обратитесь к ответу Дениса для деталей.

Это не рекомендуется, поскольку это нарушает целостность метаданных вашего пива. Брю считает, что у него версия 8b, однако вы вручную скомпилировали 9b и перезаписали файлы.

4. Вручную сделать символическую ссылку на старую версию (серьезно?)

Не создавайте вручную символических ссылок на оставшееся libjpeg.8.dylib. Если файл есть, вы можете просто brew switchк нему, как указано во втором решении выше.

Это просто худший взлом, который вы можете здесь сделать.


Такие проблемы со временем будут исправлены .


4
Это должен быть принятый ответ почти положительно.
Майк Легаси

Первый метод у меня сработал, однако мне также пришлось запустить его, xcode-select --installпрежде чем я смог переустановить PHP 7.1 из исходников.
jrdn

Метод 2 больше не находит фиксацию, возможно, из-за принудительных толчков. Временное решение: вместо того , чтобы 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.
tuomassalo

@tuomassalo Спасибо, что поделились своим обходным путем. Коммит все еще существует в моем локальном клоне. Если это произошло из-за принудительного нажатия, вы также не смогли получить его с помощью curl. Мне кажется, что ваш локальный клон почему-то не обновлен с удаленным 🤔.
sepehr 01

2
если git checkout b231469возникает ошибка, сначала попробуйте этоgit -C "$(brew --repo homebrew/core)" fetch --unshallow
Йоши

13

Сегодня столкнулся с подобной проблемой. Причиной проблемы была более новая версия 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вам необходимо удалить его перед сборкой из исходников. Это также относится к расширениям.


то же самое здесь только что - что именно произошло? brew обновленный libjpeg, и теперь он не в правильной версии для php5.6?
Тоби

Кстати. ваш ответ выводит: Предупреждение: josegonzalez / php / php56 5.6.30_6 уже установлен, вероятно, сначала следует удалить его? кажется страшным: P
Toby

Да, вам нужно удалить phpи расширения. Затем установите phpс помощью --build-from-source. Я просмотрел историю libjpegформулы git, и версия libjpegбыла обновлена ​​до 9b5 августа.
Павел Вацлавчик

хорошо, так что это как-то сломало его ... ну, компиляция завершена. похоже, теперь это снова работает - спасибо :)
Тоби

Это сработало и для PHP 7.1, просто удалите и запустите brew install --build-from-source php71. Проблема возникла у меня сегодня вечером после пробежки brew upgrade.
Дуайт

6

У меня была такая же проблема, и я решил ее, загрузив tarball manuallu libjpeg отсюда и запустив:

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

Исправлена ​​та же проблема для меня, хотя теперь скомпилированная версия должна быть v8d, и эти файлы libtool не существуют в моей системе (все еще работают).
Кристоф Буршка

Исправлена ​​проблема и для меня. Спасибо!
Рони Лауккаринен

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

🍻



5

У меня сработала следующая команда.

brew switch libjpeg 8d

Это сработало для меня. Я заглянул в свой каталог с помощью ls /usr/local/Cellar/jpeg/и увидел два подкаталога, 8dи, 9c поскольку моя ошибка была в том, что dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibэто имело смысл, я пытался загрузить не тот.
TrophyGeek

4

Я не пробовал ответить Джирсона, но для меня сработало:

brew uninstall libjpeg
brew install libjpeg

Что вы делаете со всеми пакетами, зависящими от libjpeg? Ошибка: отказ от удаления / usr / local / Cellar / jpeg / 9b, потому что это требуется для [SNIP], которые в настоящее время установлены.
Ричард Квадлинг

1
@RichardAQuadling Вы можете использовать эту --ignore-dependenciesопцию при удалении.
sepehr

Похоже, это не решило проблему для меня. Последняя версия jpeg в настоящее время - jpeg-9b. libjpeg.8.dylib по-прежнему отсутствует после выполнения инструкций @gwg.
Джино

3

У меня была та же проблема, и единственное, что помогло, - это использовать --build-from-sourceпараметр:

brew install php70 --build-from-source

2

У меня тоже была эта проблема. Я решил это так: Удалите jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Удалите jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Удалите jpeg / 8b и 9b

Переустановите jpeg / 9b

brew install jpeg

Переустановите jpeg / 9b


РАБОТАЛО, ага !!
Хусам

1

Я разделяю это, так как у меня была такая же проблема при использовании 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


0

Как отмечает @lifecom, это исправлено с обновлением php70 homebrew, но вы все равно можете столкнуться с проблемой, если brew upgrade пытаетесь обновить другие пакеты перед обновлением php70.

Исправьте это, сначала вручную обновив php70, brew upgrade php70и тогда вы сможете работать brew upgradeбез проблем (или, по крайней мере, без этой проблемы).



0

В некоторых случаях, особенно в Catalina, бочка Homebrew для пакета может существовать, но не связана должным образом. В таком случае попробуйте:

brew link libjpeg
brew reinstall php --build-from-source
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.