由于我遇到了这个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
有什么建议吗?
由于我遇到了这个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问题存储库中提出的那样,这可以在不覆盖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 switch
命令来降级 libjpeg 版本,因为它会报错 switch
命令不被支持。所以我只能选择这种方法。 - liushuaikobe尽管被接受的答案中的解决方案可行,但这并不是修复问题的正确方式。它会破坏brew的元数据完整性。
问题在于Homebrew的jpeg
配方已升级到v9,但现有的“bottled” PHP配方仍然构建并链接到先前的版本v8,而该版本在您的系统上已不存在。
您有几个选项来解决此问题。
phpxx
配方(强烈推荐)卸载您的PHP配方,并从源代码重新构建它,而不是使用瓶装版本。这样,PHP将使用并链接当前安装的版本jpeg
。假设您正在处理php71
:
brew reinstall php71 --build-from-source
jpeg
公式的正确方法 (优先于手动重新编译)如果您还没有运行brew cleanup
,则已经在Homebrew的库中获取了先前的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的版本。有关详细信息,请参阅Denis' answer。
这样做是不推荐的,因为它会破坏你的brew元数据的完整性。Brew认为它有8b版本,但实际上你手动编译了9b并覆盖了文件。
不要手动创建剩余的libjpeg.8.dylib
符号链接。如果该文件存在,则可以根据上面第二个解决方案中提到的方法进行brew switch
。
这只是在此处可以做的最糟糕的hack。
此类问题最终将会被修复。
git checkout b231469
,而是使用curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb
,然后用git checkout Formula/jpeg.rb
代替git checkout master
。 - tuomassalocurl
获取它。在我看来,似乎您的本地克隆与远程仓库不同步。 - sepehrgit checkout b231469
出错,那么首先尝试执行 git -C "$(brew --repo homebrew/core)" fetch --unshallow
。 - Yoshi今天我遇到了类似的问题,问题的原因是使用了更新版本的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
,在从源代码构建之前必须先卸载它。这也适用于扩展。
php
和其扩展。然后使用 --build-from-source
安装 php
。我查看了 libjpeg
公式的 git 历史记录,libjpeg
的版本于8月5日更新为 9b
版本。 - pwcbrew install --build-from-source php71
。在我今晚运行brew upgrade
之后出现了问题。 - Dwight我试图升级composer
时遇到了类似的问题:
dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Referenced from: /usr/local/bin/php
Reason: image not found
composer: PHP Phar support is required for this formula
Error: An unsatisfied requirement failed this build.
问题在于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
我曾经遇到过同样的问题,通过从这里手动下载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
ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib
以下命令对我有效。
brew switch libjpeg 8d
ls /usr/local/Cellar/jpeg/
查看了我的目录,并看到了两个子目录 8d
和 9c
。由于我的错误是 dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
,所以它试图加载错误的库是有道理的。 - TrophyGeek我没有尝试Jirson的回答,但对我有用的是:
brew uninstall libjpeg
brew install libjpeg
我曾经遇到同样的问题,唯一有用的方法是使用 --build-from-source
参数:
brew install php70 --build-from-source
brew doctor
和brew list
的输出是什么? - IKavanagh