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

Sno*_*ash 106 php homebrew

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)

  • 考虑以[正确的方式](/sf/answers/3198687061/)来做. (19认同)
  • 除了可能添加一条奇怪的清理线,这应该是公认的答案...... (4认同)

sep*_*ehr 161

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

问题

问题是Homebrew的jpeg公式已经升级到v9,但现有的"瓶装"PHP公式仍然构建并与之前的版本v8相关联,而v8在您的系统上已不复存在.

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

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

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

brew reinstall php71 --build-from-source
Run Code Online (Sandbox Code Playgroud)

2. 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.如果您遇到此类不兼容问题,请查看上面的第一个解决方案.

3. jpeg通过手动重新编译降级(不推荐)

获取源代码,编译并覆盖brew的版本.有关详细信息,请参阅Denis的回答.

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

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

不要手动符号链接剩余的libjpeg.8.dylib.如果文件在那里,您可以brew switch像上面第二个解决方案中提到的那样.

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


这些问题最终将得到解决.

  • 这应该是几乎肯定的接受答案. (4认同)
  • brew switch jpeg 8d - brewfully correct (3认同)
  • 如果 `git checkout b231469` 出现错误,那么先试试这个 `git -C "$(brew --repo homebrew/core)" fetch --unshallow` (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
Run Code Online (Sandbox Code Playgroud)

php从源代码安装:

brew install --build-from-source php56
Run Code Online (Sandbox Code Playgroud)

更新:
如果您已经安装php,则必须在从源构建之前卸载它.它也适用于扩展.


Jir*_*era 6

我有同样的问题,我通过从这里下载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)


Gab*_*oux 6

我在尝试升级时遇到了类似的问题composer:

dyld:未加载库:/usr/local/opt/jpeg/lib/libjpeg.8.dylib引
自:/ usr/local/bin/php
原因:找不到图像
作者:此公式需要PHP Phar支持
错误:未满足的要求未通过此构建.

问题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
Run Code Online (Sandbox Code Playgroud)

然后我再次升级了一切:)

brew update && brew upgrade
Run Code Online (Sandbox Code Playgroud)


Pan*_*wal 5

以下命令对我有用。

brew switch libjpeg 8d
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)