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


108

由于遇到这个libpng问题,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

有什么建议?


brew doctor和的输出是brew list什么?
IKavanagh 2015年

Answers:


250

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

4
除了添加一个奇数行进行清理外,这应该是公认的答案……
Koen Betsens

也为我工作。谢谢。
阿德里安·林奇

也为我工作。干杯。
Eduardo Leggiero

19
考虑改用正确的方法
sepehr

谢谢工作,我安装了rabbitmq后遇到了同样的问题
Omar Makled

167

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

问题

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

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

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

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

brew reinstall php71 --build-from-source

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

如果您尚未运行brew cleanup,那么您已经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的答案

不建议使用此方法,因为它会破坏Brew元数据的完整性。Brew认为它具有8b版本,但是,您手动编译了9b并覆盖了文件。

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

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

这只是您可以在此处执行的最糟糕的操作。


这样的问题将最终得到解决


4
这应该几乎是肯定的答案。
Mike Legacy

第一种方法对我有用-但是,我还必须先运行,xcode-select --install然后才能从源代码重新安装PHP 7.1。
jrdn

方法2不再找到提交,可能是由于强制按下。解决方法:代替git checkout b231469我做curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb,然后代替git checkout master我写git checkout Formula/jpeg.rb
tuomassalo

@tuomassalo感谢您分享解决方法。该提交仍然存在于我的本地克隆中。如果是由于强行推动,则您将无法使用curl其中任何一个来获取它。在我看来,您的本地克隆似乎不符合远程🤔的最新要求。
sepehr

2
如果git checkout b231469出现错误,请先尝试git -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi 18'30

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,则必须先卸载它,然后再从源代码进行构建。它也适用于扩展。


刚才在这里-到底发生了什么?brew更新了libjpeg,它现在不是适用于php5.6的正确版本吗?
Toby

顺便说一句 您的答案输出:警告:josegonzalez / php / php56 5.6.30_6已经安装,可能应该先将其删除?似乎很恐怖:P
Toby

是的,您必须卸载php和扩展。然后安装php使用--build-from-source。我查看了该libjpeg公式的git历史记录,并将其版本libjpeg更新为9b8月5日。
帕维尔Wacławczyk

很好,所以以某种方式打破了它……好,编译完成了。看来它现在又可以工作了-谢谢:)
Toby

这同样适用于PHP 7.1,只需卸载然后运行即可brew install --build-from-source php71。跑步后今晚对我产生了问题brew upgrade
德怀特

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

尽管现在编译的版本应该是v8d,而那些libtool文件在我的系统上不存在(仍然有效),但对我来说解决了相同的问题。
Christoph Burschka '17

也为我解决了该问题。谢谢!
罗尼·劳卡里宁

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

然后,我能够再次升级所有内容:)

brew update && brew upgrade

🍻


6

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

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

5

以下命令对我有用。

brew switch libjpeg 8d

这对我有用。我使用来查看目录ls /usr/local/Cellar/jpeg/,看到了两个子目录8d9c 由于我的错误是 dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib有道理的,因此它试图加载错误的目录。
TrophyGeek

4

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

brew uninstall libjpeg
brew install libjpeg

您如何处理所有依赖libjpeg的软件包?错误:因为[SNIP]需要安装/ usr / local / Cellar / jpeg / 9b,所以拒绝卸载。
理查德·阿奎德

1
@RichardAQuadling --ignore-dependencies卸载时可以使用该选项。
sepehr

这似乎并没有为我解决问题。最新的jpeg版本当前为jpeg-9b。遵循@gwg的指示后,仍然缺少libjpeg.8.dylib。
吉诺(Gino)

3

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

brew install php70 --build-from-source

2

我也有这个问题。我以这种方式解决了问题:卸载jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

卸载jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

卸载jpeg / 8b和9b

重新安装jpeg / 9b

brew install jpeg

重新安装jpeg / 9b


工作,是的!
Husam,

1

我分享了这一点,因为使用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


0

正如@lifecom所指出的那样,这是通过自制软件的php70更新修复的,但是如果brew upgrade在升级php70之前尝试更新其他软件包,则可能仍然会遇到问题。

通过先手动更新php70来解决此问题,brew upgrade php70然后您应该就可以运行brew upgrade没有问题(或者,至少没有这个问题)。



0

在某些情况下,尤其是在卡塔琳娜州,该包装的Homebrew酒桶可能存在但未正确链接。在这种情况下,请尝试:

brew link libjpeg
brew reinstall php --build-from-source
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.