簡體   English   中英

dyld:庫未加載:/usr/local/lib/libjpeg.8.dylib - 自制 php

[英]dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib - homebrew php

當我遇到這個 libpng 問題時,PHP 對我不起作用,所以我用 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

有什么建議?

正如@jirson-tavera 在homebrew-php repo issue 中提出的,這可以在不覆蓋您的 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

即使已接受答案中的解決方案有效,也不是解決問題的正確方法。 它違反了 brew 的元數據完整性。

問題

問題是 Homebrew 的jpeg公式已升級到 v9,但現有的“瓶裝”PHP 公式仍在構建並鏈接到以前的版本 v8,該版本已不再存在於您的系統中。

您有幾個選項可以解決此問題。

1.從源碼重新編譯phpxx公式(強烈推薦)

卸載您的 php 公式,並從源代碼重建它,而不是使用瓶裝版本。 這樣, php 將使用並鏈接到當前安裝的jpeg版本。 假設您正在處理php71

brew reinstall php71 --build-from-source

2. 以正確的方式降級jpeg公式(優先於手動重新編譯)

如果您還沒有運行brew cleanup ,那么您已經在 brew 的地窖中獲得了以前的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 的版本。 有關詳細信息,請參閱丹尼斯的回答

不建議這樣做,因為它違反了 brew 元數據的完整性。 Brew 認為它有 8b 版本,但是,您手動編譯了 9b 並覆蓋了文件。

4.手動符號鏈接舊版本(認真的?)

不要手動符號鏈接剩余的libjpeg.8.dylib 如果文件在那里,你可以像上面的第二個解決方案中提到的那樣brew switch到它。

這只是你在這里可以做的最糟糕的黑客攻擊。


此類問題最終將得到解決

我今天遇到了類似的問題。 問題的原因是較新版本的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 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

我在嘗試升級composer時遇到了類似的問題:

dyld:庫未加載:/usr/local/opt/jpeg/lib/libjpeg.8.dylib
引用自:/usr/local/bin/php
原因:找不到圖片
作曲家:此公式需要 PHP Phar 支持
錯誤:未滿足的要求使此構建失敗。

問題是php再也找不到libjpeg庫了。 解決此問題的一種方法是重新安裝phplibjpeg 這是我重新安裝它們的方法:

# 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

🍻

一個骯臟的解決方案,對我來說很好用。

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

以下命令對我有用。

brew switch libjpeg 8d

我沒有嘗試 Jirson 的回答,但對我有用的是:

brew uninstall libjpeg
brew install libjpeg

我遇到了同樣的問題,唯一有幫助的是使用--build-from-source參數:

brew install php70 --build-from-source

我也有這個問題。 我是這樣解決的:卸載jpeg/8b:

brew uninstall --ignore-dependencies libjpeg

卸載 jpeg/9b:

brew uninstall --ignore-dependencies jpeg

卸載 jpeg/8b 和 9b

重新安裝 jpeg/9b

brew install jpeg

重新安裝 jpeg/9b

我分享這個是因為我在使用 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

Homebrew php 已更新,不再是 libjpeg 的問題

正如@lifecom 所指出的,這已通過 homebrew 的 php70 更新修復,但如果brew upgrade在升級 php70 之前嘗試更新其他軟件包,您可能仍會遇到問題。

通過首先使用brew upgrade php70手動更新 php70 來解決這個問題,然后你應該能夠運行brew upgrade沒問題(或者,好吧,至少沒有這個問題)。

brew switch libjpeg 8d

代客 - 帶有 php7.1 的 mac

在某些情況下,尤其是在 Catalina 中,該包的 Homebrew 桶可能存在但未正確鏈接。 在這種情況下嘗試:

brew link libjpeg
brew reinstall php --build-from-source

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM