dyld: Бібліотека не завантажена: /usr/local/lib/libjpeg.8.dylib - домашня мова php


108

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 repo , це можна виправити, не змінюючи установку варіння:

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
Крім того, можливо, додавання непарної лінії для прибирання, це має бути прийнятою відповіддю ...
Koen Betsens

Працював і для мене. Дякую.
Адріан Лінч

Працював і для мене. Ура.
Едуардо Леджієро

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
Це має бути прийнятою відповіддю майже позитивно.
Mike Legacy

Перший метод працював для мене - однак мені також довелося запуститись, 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будь-якого. Мені здається, що ваш місцевий клон якось не в курсі віддаленого 🤔.
вересень

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вам потрібно видалити його перед тим, як створити його з джерела. Це стосується також розширень.


те саме тут зараз - що саме сталося? варити оновлений libjpeg і його тепер не в потрібній версії для php5.6?
Тобі

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

Так, вам доведеться видалити phpі розширення. Потім встановіть за phpдопомогою --build-from-source. Я вивчив історію git libjpegформули, і версія libjpegбула оновлена ​​до 9b5 серпня.
Paweł Wacławczyk

приємно, це це якось зламало ... ну, компіляція робиться. здається, це знову працює - спасибі :)
Toby

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

6

У мене була така ж проблема, і я вирішив її, завантаживши звідси керівництво libjpeg tarball і запустивши:

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 не існують у моїй системі (досі працюють).
Крістоф Буршка

Виправлена ​​проблема і для мене. Дякую!
Roni Laukkarinen

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

🍻


6

Брудне рішення, яке добре працює для мене.

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

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

PHP домівки оновлено та більше не має проблеми з libjpeg


0

Як зазначає @lifecom, це виправлено за допомогою оновлення php70 homebrew, але ви, можливо, все-таки зіткнетеся з проблемою, якщо brew upgrade намагаєтесь оновити інші пакети перед оновленням php70.

Виправте це, спершу вручну оновивши php70, brew upgrade php70і тоді ви зможете запускати brew upgradeбез проблем (або, принаймні, без цієї проблеми).



0

У деяких випадках, особливо в Каталіні, бочка з домашньою ємністю для упаковки може існувати, але не бути належно пов'язаною. У такому випадку спробуйте:

brew link libjpeg
brew reinstall php --build-from-source
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.