由于遇到这个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
有什么建议?
由于遇到这个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
有什么建议?
Answers:
正如@ 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
即使接受的答案中的解决方案有效,也不是解决问题的正确方法。它违反了brew的元数据完整性。
问题是Homebrew的jpeg
公式已升级到v9,但是仍在构建现有的“瓶装” PHP公式,并将其与以前的版本v8(在您的系统上不再存在)链接。
您可以通过几种方法解决此问题。
phpxx
从源代码重新编译公式(强烈建议)卸载您的php公式,然后从源代码重建它,而不使用瓶装版本。这样,php将使用并链接到当前安装的版本jpeg
。假设您正在处理php71
:
brew reinstall php71 --build-from-source
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
。如果您遇到此类不兼容问题,请检查上面的第一个解决方案。
jpeg
通过手动重新编译降级(不推荐)获取源代码,编译并覆盖brew的版本。有关详细信息,请参考Denis的答案。
不建议使用此方法,因为它会破坏Brew元数据的完整性。Brew认为它具有8b版本,但是,您手动编译了9b并覆盖了文件。
不要手动符号链接剩余物libjpeg.8.dylib
。如果文件在那里,您可以brew switch
按照上面第二个解决方案中的说明进行操作。
这只是您可以在此处执行的最糟糕的操作。
这样的问题将最终得到解决。
xcode-select --install
然后才能从源代码重新安装PHP 7.1。
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
。
git checkout b231469
出现错误,请先尝试git -C "$(brew --repo homebrew/core)" fetch --unshallow
我今天遇到了类似的问题。问题的原因是的较新版本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
,则必须先卸载它,然后再从源代码进行构建。它也适用于扩展。
php
和扩展。然后安装php
使用--build-from-source
。我查看了该libjpeg
公式的git历史记录,并将其版本libjpeg
更新为9b
8月5日。
brew install --build-from-source php71
。跑步后今晚对我产生了问题brew upgrade
。
我遇到了同样的问题,我通过从此处下载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
我在尝试升级时遇到了类似的问题composer
:
dyld:未加载库:/usr/local/opt/jpeg/lib/libjpeg.8.dylib
引用自:/ usr / local / bin / php
原因:找不到图像
作曲家:该公式需要PHP Phar支持
错误:无法满足的要求导致此构建失败。
问题是php
找不到libjpeg
图书馆了。解决此问题的一种方法是重新安装php
和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
然后,我能够再次升级所有内容:)
brew update && brew upgrade
🍻
以下命令对我有用。
brew switch libjpeg 8d
ls /usr/local/Cellar/jpeg/
,看到了两个子目录8d
,9c
由于我的错误是 dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
有道理的,因此它试图加载错误的目录。
brew doctor
和的输出是brew list
什么?