dyld: Library tidak dimuat: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP tidak berfungsi untuk saya karena saya mengalami masalah libpng ini , jadi saya menginstal ulang versi baru dengan Homebrew.

Namun, saya mendapatkan kesalahan serupa dengan libjpegkali ini:

$ 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

Ada saran?


Apa keluaran dari brew doctordan brew list?
IKavanagh

Jawaban:


250

Seperti yang diusulkan oleh @ jirson-tavera dalam masalah repo homebrew-php , ini dapat diperbaiki tanpa menimpa instalasi minuman Anda:

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
Selain mungkin menambahkan baris ganjil untuk pembersihan, ini harus menjadi jawaban yang diterima ...
Koen Betsens

Bekerja untuk saya juga. Terima kasih.
Adrian Lynch

Bekerja untuk saya juga. Bersulang.
Eduardo Leggiero

19
Pertimbangkan untuk melakukannya dengan cara yang benar .
Sepehr

terima kasih berfungsi, saya mendapat masalah yang sama setelah menginstal rabbitmq
Omar Makled

167

Meskipun solusi dalam jawaban yang diterima berfungsi, itu bukan cara yang tepat untuk memperbaiki masalah. Itu melanggar integritas metadata brew.

Masalah

Masalahnya adalah jpegformula Homebrew telah diupgrade ke v9 tetapi formula PHP "botol" yang ada masih dibangun dan ditautkan dengan versi sebelumnya, v8, yang tidak lagi ada di sistem Anda.

Anda memiliki beberapa opsi untuk memperbaiki masalah tersebut.

1. Kompilasi ulang phpxxrumus dari sumber (sangat disarankan)

Hapus instalan rumus php Anda, dan buat ulang dari sumbernya daripada menggunakan versi botol. Dengan cara ini, php akan menggunakan dan menautkan ke versi yang saat ini diinstal jpeg. Dengan asumsi Anda berurusan dengan php71:

brew reinstall php71 --build-from-source

2. Turunkan jpegrumus dengan cara yang benar (lebih disukai daripada menyusun ulang secara manual)

Jika Anda belum menjalankan brew cleanup, Anda sudah mendapatkan jpegversi sebelumnya di gudang minuman Anda, beralihlah ke versi itu:

brew switch jpeg 8d

Jika Anda mendapatkan jpeg does not have a version "8d" in the Cellar.kesalahan, Anda harus memulihkannya terlebih dahulu dengan mengembalikan riwayat:

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

Anda dapat mengetahui hash komit dengan menggunakan brew log jpegdan melalui pesan komit.

Kelemahannya adalah mungkin ada rumus lain yang membutuhkan versi yang lebih baru untuk bekerja dengan baik, misalnya imagemagick. Jika Anda menghadapi masalah ketidakcocokan, periksa solusi pertama di atas.

3. Turunkan versi jpegdengan mengompilasi ulang secara manual (tidak disarankan)

Ambil sumbernya, kompilasi dan timpa versi minumannya. Lihat jawaban Denis untuk detailnya.

Ini tidak disarankan karena melanggar integritas metadata minuman Anda. Brew berpikir bahwa ia memiliki versi 8b, namun, Anda mengompilasi 9b secara manual dan menimpa file.

4. Tautkan versi lama secara manual (serius?)

Jangan menghubungkan sisa file secara manuallibjpeg.8.dylib . Jika file ada di sana, Anda bisa langsung brew switchke sana seperti yang disebutkan dalam solusi kedua di atas.

Itu hanya peretasan terburuk yang dapat Anda lakukan di sini.


Masalah seperti itu pada akhirnya akan diperbaiki .


4
Ini harus menjadi jawaban yang diterima hampir secara positif.
Mike Legacy

Metode pertama berhasil untuk saya - namun, saya juga harus menjalankan xcode-select --installsebelum saya dapat menginstal ulang PHP 7.1 dari sumber.
jrdn

Metode 2 tidak menemukan komit lagi, mungkin karena dorongan paksa. Solusi: alih-alih git checkout b231469saya lakukan curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, alih-alih git checkout mastersaya menulisgit checkout Formula/jpeg.rb .
tuomassalo

@tuomassalo Terima kasih telah membagikan solusi Anda. Komit masih ada di klon lokal saya. Jika itu karena dorongan paksa, Anda juga tidak dapat mengambilnya menggunakan curl. Bagi saya, sepertinya klon lokal Anda tidak up-to-date dengan remote 🤔.
sepehr

2
jika git checkout b231469mendapat kesalahan, maka coba ini dulugit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Saya mengalami masalah serupa hari ini. Penyebab masalahnya adalah versi yang lebih baru libjpeg. Dan solusi yang berhasil adalah membuat phpbotol dari sumbernya.

Periksa versi yang tersedia dari 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

Instal phpdari sumber:

brew install --build-from-source php56

Pembaruan :
Jika Anda telah menginstal, phpAnda harus menghapus instalannya sebelum membangun dari sumber. Ini juga berlaku untuk ekstensi.


sama di sini sekarang - apa yang sebenarnya terjadi? membuat libjpeg yang diperbarui dan sekarang tidak dalam versi yang tepat untuk php5.6?
Toby

btw. output jawaban Anda: Peringatan: josegonzalez / php / php56 5.6.30_6 sudah diinstal mungkin harus menghapusnya terlebih dahulu? tampaknya menakutkan: P
Toby

Ya, Anda harus mencopot pemasangan phpdan ekstensi. Kemudian instal phpdengan --build-from-source. Saya telah melihat sejarah git dari libjpegformula dan versi libjpegdiperbarui 9bpada tanggal 5 Agustus.
Paweł Wacławczyk

bagus jadi ini entah bagaimana merusaknya ... yah, kompilasi selesai. tampaknya itu berfungsi lagi sekarang - terima kasih :)
Toby

Ini bekerja untuk PHP 7.1 juga, cukup hapus instalan dan kemudian jalankan brew install --build-from-source php71. Masalah muncul untuk saya malam ini setelah berjalan brew upgrade.
Dwight

6

Saya memiliki masalah yang sama dan saya menyelesaikannya dengan mengunduh libjpeg tarball manuallu dari sini dan menjalankan:

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

Memperbaiki masalah yang sama untuk saya, meskipun versi yang dikompilasi sekarang harus v8d, dan file libtool tersebut tidak ada di sistem saya (masih berfungsi).
Christoph Burschka

Memperbaiki masalah untuk saya juga. Terima kasih!
Roni Laukkarinen

6

Saya mendapatkan masalah serupa saat mencoba meningkatkan composer:

dyld: Library tidak dimuat: /usr/local/opt/jpeg/lib/libjpeg.8.dylib Dirujuk
dari: / usr / local / bin / php
Alasan: image tidak ditemukan
komposer: Dukungan PHP Phar diperlukan untuk rumus ini
Error: Persyaratan yang tidak terpenuhi gagal dalam build ini.

Masalah tidak phpdapat menemukan libjpegperpustakaan lagi. Salah satu cara untuk memperbaikinya adalah dengan menginstal ulang phpdan libjpeg. Berikut cara saya menginstalnya kembali:

# 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

Saya kemudian dapat meningkatkan semuanya lagi :)

brew update && brew upgrade

🍻


6

Solusi kotor, itu bekerja dengan baik untuk saya.

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

5

Mengikuti perintah berhasil untuk saya.

brew switch libjpeg 8d

Ini berhasil untuk saya. Saya melihat di direktori saya menggunakan ls /usr/local/Cellar/jpeg/dan melihat dua subdirektori 8ddan 9c Karena kesalahan saya adalah dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibmasuk akal itu mencoba memuat yang salah.
TrophyGeek

4

Saya tidak mencoba jawaban Jirson, tetapi yang berhasil untuk saya adalah:

brew uninstall libjpeg
brew install libjpeg

Apa yang Anda lakukan dengan semua paket yang bergantung pada libjpeg? Kesalahan: Menolak untuk menghapus / usr / local / Cellar / jpeg / 9b karena diperlukan oleh [SNIP], yang saat ini diinstal.
Richard A Quadling

1
@RichardAQuadling Anda dapat menggunakan --ignore-dependenciesopsi ini saat mencopot pemasangan.
sepehr

Ini sepertinya tidak menyelesaikan masalah bagi saya. Versi jpeg terbaru saat ini adalah jpeg-9b. libjpeg.8.dylib masih hilang setelah mengikuti petunjuk @ gwg.
Gino

3

Saya mengalami masalah yang sama dan satu-satunya hal yang membantu adalah menggunakan --build-from-sourceparameter:

brew install php70 --build-from-source

2

Saya juga punya masalah ini. Saya menyelesaikannya dengan cara ini: Copot pemasangan jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Copot pemasangan jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Copot pemasangan jpeg / 8b dan 9b

Instal ulang jpeg / 9b

brew install jpeg

Instal ulang jpeg / 9b


BEKERJA, Ya !!
Husam

1

Saya membagikan ini karena saya memiliki masalah yang sama saat menggunakan PHP5.4. Awalnya, saya memiliki PHP5.6 dan berfungsi dengan baik. Kemudian saya menurunkan versi ke php5.4 karena aplikasi saya hanya mendukung PHP5.4.

Kemudian kesalahan ini muncul. Saya perhatikan bahwa saya memiliki libjpeg.9.dylibdan PHP5.4 sedang mencari libjpeg.8.dylib.

Melakukan hal berikut mengurutkan masalah:

brew uninstall php54
brew install --build-from-source php54

0

Homebrew php telah diperbarui dan tidak lagi menjadi masalah dengan libjpeg


0

Sebagai catatan @lifecom, ini diperbaiki dengan pembaruan php70 homebrew, tetapi Anda mungkin masih mengalami masalah jika brew upgrade mencoba memperbarui paket lain sebelum memutakhirkan php70.

Perbaiki ini dengan memperbarui php70 secara manual terlebih dahulu brew upgrade php70dan Anda seharusnya tidak dapat menjalankan brew upgrademasalah (atau, setidaknya tanpa masalah ini ).



0

Dalam beberapa kasus, terutama di Catalina, tong Homebrew untuk paket mungkin ada tetapi tidak ditautkan dengan benar. Dalam hal ini coba:

brew link libjpeg
brew reinstall php --build-from-source
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.