dyld:库未加载:/usr/local/lib/libjpeg.8.dylib - 自制软件php

时间:2015-09-21 19:44:04

标签: php homebrew

当我遇到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

有什么建议吗?

13 个答案:

答案 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,它在您的系统上不再存在。

您有几个选项可以解决此问题。

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的版本。有关详细信息,请参阅Denis' answer

建议不要这样做,因为它违反了brew元数据的完整性。 Brew认为它有8b版本,但是,你手动编译9b并覆盖文件。

4。手动符号链接旧版本(严重?)

不要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库了。解决此问题的一种方法是重新安装libjpegphp。以下是我重新安装它们的方法:

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

Uninstall jpeg/8b and 9b

重新安装jpeg / 9b

brew install jpeg

Re-install jpeg/9b

答案 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