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

dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib - homebrew php

PHP 对我不起作用,因为我遇到了 this libpng issue,所以我用 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

有什么建议吗?

我遇到了同样的问题,我通过从 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

我没有尝试 Jirson 的回答,但对我有用的是:

brew uninstall libjpeg
brew install libjpeg

我今天遇到了类似的问题。问题的原因是 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,则必须在从源代码构建之前将其卸载。它也适用于扩展。

正如@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

我遇到了同样的问题,唯一有用的是使用 --build-from-source 参数:

brew install php70 --build-from-source

Homebrew php 已更新,不再是 libjpeg 的问题

我分享这个是因为我在使用 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

正如@lifecom 指出的那样,这已通过自制程序的 php70 更新修复,但如果 brew upgrade 在升级之前尝试更新其他软件包,您可能仍然 运行 遇到问题 php70.

首先用brew upgrade php70手动更新php70来解决这个问题,然后你应该能够运行 brew upgrade没问题(或者,好吧,至少没有这个问题)。

尽管接受的答案中的解决方案有效,但这并不是解决问题的正确方法。它违反了 brew 的元数据完整性。

问题

问题是 Homebrew 的 jpeg 公式已升级到 v9,但现有的“瓶装”PHP 公式仍在构建,并且 link 与以前的版本 v8 相比,它不再存在于您的系统中。

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

1。从源 重新编译 phpxx 公式(强烈推荐)

卸载您的 php 公式,并从源代码重建它,而不是使用瓶装版本。这样,php 将针对当前安装的 jpeg 版本使用 link。假设您正在处理 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 的版本。详见

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

4。手动 symlink 旧版本 (严重吗?)

不要manually symlink剩下的libjpeg.8.dylib。如果文件在那里,你可以像上面第二个解决方案中提到的那样 brew switch 到它。

这只是您在这里可以做的最糟糕的黑客攻击。


此类问题最终会fixed

我在尝试升级时遇到了类似的问题 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 库了。解决此问题的一种方法是重新安装 phplibjpeg。这是我重新安装它们的方法:

# 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

我也有这个问题。我是这样解决的: 卸载 jpeg/8b:

brew uninstall --ignore-dependencies libjpeg

卸载jpeg/9b:

brew uninstall --ignore-dependencies jpeg

重新安装jpeg/9b

brew install jpeg

以下命令对我有用。

brew switch libjpeg 8d

一个肮脏的解决方案,对我来说工作得很好。

ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib

在某些情况下,尤其是在 Catalina 中,程序包的 Homebrew cask 可能存在但未正确链接。在那种情况下尝试:

brew link libjpeg
brew reinstall php --build-from-source