[英]Homebrew upgrade drops PHP: dyld: Library not loaded: /usr/local/opt/libpsl/lib/libpsl.5.dylib
[英]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,該版本已不再存在於您的系統中。
您有幾個選項可以解決此問題。
phpxx
公式(強烈推薦) 卸載您的 php 公式,並從源代碼重建它,而不是使用瓶裝版本。 這樣, php 將使用並鏈接到當前安裝的jpeg
版本。 假設您正在處理php71
:
brew reinstall php71 --build-from-source
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
。 如果您遇到此類不兼容問題,請查看上面的第一個解決方案。
jpeg
(不推薦)獲取源代碼,編譯並覆蓋 brew 的版本。 有關詳細信息,請參閱丹尼斯的回答。
不建議這樣做,因為它違反了 brew 元數據的完整性。 Brew 認為它有 8b 版本,但是,您手動編譯了 9b 並覆蓋了文件。
不要手動符號鏈接剩余的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
庫了。 解決此問題的一種方法是重新安裝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
🍻
一個骯臟的解決方案,對我來說很好用。
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
我分享這個是因為我在使用 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.