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

2022-08-30 07:25:09

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

有什么建议吗?


答案 1

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

答案 2

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

问题

问题是Homebrew的公式已经升级到v9,但现有的“瓶装”PHP公式仍然与以前的版本v8构建并链接,该版本不再存在于您的系统上。jpeg

您有几种方法可以解决此问题。

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

卸载php公式,并从源代码重建它,而不是使用瓶装版本。这样,php 将使用并链接到当前安装的 .假设您正在处理:jpegphp71

brew reinstall php71 --build-from-source

2.以正确的方式降级公式(优先于手动重新编译)jpeg

如果您还没有运行,那么您的啤酒酒窖中已经获得了以前的版本,请切换到它:brew cleanupjpeg

brew switch jpeg 8d

如果 jpeg 在 Cellar. 错误中没有版本“8d”,则需要先通过还原历史记录来还原它:

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认为它具有8b版本,但是,您手动编译了9b并覆盖了文件。

4.手动符号链接旧版本(真的吗?

不要手动符号链接剩余的 。如果文件在那里,您可以按照上面的第二个解决方案中提到的方式进行操作。libjpeg.8.dylibbrew switch

这只是你能在这里做的最糟糕的黑客攻击。


这些问题最终将得到解决


推荐