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
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Den*_*lis 247
正如@ jirson-tavera在homebrew-php repo问题中所提出的,这可以修复而不会覆盖你的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
Run Code Online (Sandbox Code Playgroud)
sep*_*ehr 161
即使接受的答案中的解决方案有效,但这不是解决问题的正确方法.它违反了brew的元数据完整性.
问题是Homebrew的jpeg公式已经升级到v9,但现有的"瓶装"PHP公式仍然构建并与之前的版本v8相关联,而v8在您的系统上已不复存在.
您有几个选项可以解决此问题.
phpxx从源代码重新编译公式(强烈推荐)卸载您的php公式,并从源代码重建它,而不是使用瓶装版本.这样,php将使用和链接当前安装的版本jpeg.假设你正在处理php71:
brew reinstall php71 --build-from-source
Run Code Online (Sandbox Code Playgroud)
jpeg以正确的方式降级公式(首选手动重新编译)如果您还没有运行brew cleanup,那么您已经jpeg在brew的酒窖中获得了以前的版本,请切换到它:
brew switch jpeg 8d
Run Code Online (Sandbox Code Playgroud)
如果出现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
Run Code Online (Sandbox Code Playgroud)
您可以通过使用brew log jpeg和查看提交消息来查找提交哈希.
缺点是可能有其他公式要求新版本正常工作,例如imagemagick.如果您遇到此类不兼容问题,请查看上面的第一个解决方案.
jpeg通过手动重新编译降级(不推荐)获取源代码,编译并覆盖brew的版本.有关详细信息,请参阅Denis的回答.
建议不要这样做,因为它违反了brew元数据的完整性.Brew认为它有8b版本,但是,你手动编译9b并覆盖文件.
不要手动符号链接剩余的libjpeg.8.dylib.如果文件在那里,您可以brew switch像上面第二个解决方案中提到的那样.
这只是你在这里可以做的最糟糕的黑客攻击.
这些问题最终将得到解决.
小智 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
Run Code Online (Sandbox Code Playgroud)
php从源代码安装:
brew install --build-from-source php56
Run Code Online (Sandbox Code Playgroud)
更新:
如果您已经安装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
Run Code Online (Sandbox Code Playgroud)
我在尝试升级时遇到了类似的问题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
Run Code Online (Sandbox Code Playgroud)
然后我再次升级了一切:)
brew update && brew upgrade
Run Code Online (Sandbox Code Playgroud)
小智 5
一个肮脏的解决方案,对我来说很好。
ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib
Run Code Online (Sandbox Code Playgroud)