当我遇到this libpng issue时,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
有什么建议吗?
答案 0 :(得分:240)
正如@ {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
答案 1 :(得分:155)
即使接受的答案中的解决方案有效,但这不是解决问题的正确方法。它违反了brew的元数据完整性。
问题在于,Homebrew的jpeg
公式已升级到v9,但现有的#34;装瓶" 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的版本。有关详细信息,请参阅Denis' answer。
建议不要这样做,因为它违反了brew元数据的完整性。 Brew认为它有8b版本,但是,你手动编译9b并覆盖文件。
不要manually symlink剩下的libjpeg.8.dylib
。如果文件在那里,您可以brew switch
向上,如上面的第二个解决方案中所述。
这只是你在这里可以做的最糟糕的黑客攻击。
这些问题最终会fixed。
答案 2 :(得分: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
从源代码安装php
:
brew install --build-from-source php56
<强>更新强>:
如果您已经安装了php
,则必须在从源代码构建之前将其卸载。它也适用于扩展。
答案 3 :(得分:6)
我遇到了同样的问题,我通过从here下载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
答案 4 :(得分:6)
我在尝试升级SparkContext.runJob
时遇到了类似的问题:
dyld:未加载库:/usr/local/opt/jpeg/lib/libjpeg.8.dylib
参考自:/ usr / local / bin / php
原因:未找到图像
作曲家:此公式需要PHP Phar支持 错误:未满足的要求未通过此构建。
问题是composer
找不到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
答案 5 :(得分:5)
以下命令对我有用。
brew switch libjpeg 8d
答案 6 :(得分:4)
我没有尝试Jirson的回答,但对我有用的是:
brew uninstall libjpeg
brew install libjpeg
答案 7 :(得分:3)
我遇到了同样的问题,唯一有帮助的是使用--build-from-source
参数:
brew install php70 --build-from-source
答案 8 :(得分:3)
一个肮脏的解决方案,对我来说很好。
ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib
答案 9 :(得分:1)
我也有这个问题。我用这种方式解决了它: 卸载jpeg / 8b:
brew uninstall --ignore-dependencies libjpeg
卸载jpeg / 9b:
brew uninstall --ignore-dependencies jpeg
重新安装jpeg / 9b
brew install jpeg
答案 10 :(得分:0)
正如@lifecom所说,这是通过自制软件的php70更新修复的,但是如果class gen_arr {
public $arr = array();
function __construct() {
$this->arr["key"] = "value";
}
}
在升级php70之前尝试更新其他软件包,你可能仍会遇到问题。
通过首先使用brew upgrade
手动更新php70来解决此问题,然后您就可以运行brew upgrade php70
没问题(或者,至少没有此问题)。
答案 11 :(得分:0)
brew switch libjpeg 8d
代客 - mac与php7.1
答案 12 :(得分:0)
在某些情况下,尤其是在卡塔琳娜州,该包装的Homebrew酒桶可能存在但未正确链接。在这种情况下,请尝试:
brew link libjpeg
brew reinstall php --build-from-source