【问题标题】:dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib - homebrew phpdyld:库未加载:/usr/local/lib/libjpeg.8.dylib - homebrew php
【发布时间】:2015-09-21 19:44:04
【问题描述】:

当我遇到this libpng issue 时,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 doctorbrew list 的输出是什么?

标签: php homebrew


【解决方案1】:

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

【讨论】:

  • 除了可能会添加一条奇怪的行进行清理之外,这应该是公认的答案...
  • 也为我工作。谢谢。
  • 也为我工作。干杯。
  • 考虑改为the right way
  • 感谢工作,安装rabbitmq后我遇到了同样的问题
【解决方案2】:

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

问题

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

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

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

卸载您的 php 公式,并从源代码重建它,而不是使用瓶装版本。这样,php 将使用并链接到当前安装的jpeg 版本。假设你正在处理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 的版本。详情请参考Denis' answer

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

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

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

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


此类问题最终将是fixed

【讨论】:

  • 这应该是几乎可以接受的答案。
  • 第一种方法对我有用 - 但是,我还必须运行 xcode-select --install 才能从源代码重新安装 PHP 7.1。
  • 方法 2 不再找到提交,可能是因为强制推送。解决方法:我写了curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb,而不是git checkout b231469,然后我写了git checkout Formula/jpeg.rb,而不是git checkout master
  • @tuomassalo 感谢您分享您的解决方法。 The commit 仍然存在于我的本地克隆中。如果是由于强制推送,您也无法使用curl 获取它。对我来说,您的本地克隆似乎与远程 ? 不同步。
  • 如果git checkout b231469 出错,那么先试试这个git -C "$(brew --repo homebrew/core)" fetch --unshallow
【解决方案3】:

我今天遇到了类似的问题。问题的原因是libjpeg 的较新版本。有效的解决方案是从源代码构建php bottle。

查看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 的正确版本?
  • 顺便说一句。您的答案输出:警告:josegonzalez/php/php56 5.6.30_6 已安装可能应该先将其删除?看起来很可怕:P
  • 是的,你必须卸载 php 和扩展。然后安装php--build-from-source。我查看了 libjpeg 公式的 git 历史记录,libjpeg 的版本在 8 月 5 日更新为 9b
  • 很好,所以这以某种方式破坏了它......好吧,编译完成了。看来它现在又可以工作了-谢谢:)
  • 这也适用于 PHP 7.1,只需卸载然后运行 ​​brew install --build-from-source php71。在运行brew upgrade 之后,我今晚出现了问题。
【解决方案4】:

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

【讨论】:

  • 为我修复了同样的问题,虽然现在编译的版本应该是 v8d,而且我的系统上不存在那些 libtool 文件(仍然有效)。
  • 也为我解决了这个问题。谢谢!
【解决方案5】:

我在尝试升级 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】:

    以下命令对我有用。

    brew switch libjpeg 8d
    

    【讨论】:

    • 这对我有用。我使用ls /usr/local/Cellar/jpeg/ 查看了我的目录并看到了两个子目录8d9c 因为我的错误是dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib 它试图加载错误的目录是有道理的。
    【解决方案7】:

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

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

    【讨论】:

    • 软件版本化是有原因的。这将在您的服务器尝试进行不存在或已更改签名的库调用时立即对您的服务器进行段错误。
    【解决方案8】:

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

    brew uninstall libjpeg
    brew install libjpeg
    

    【讨论】:

    • 你如何处理所有依赖于 libjpeg 的包?错误:拒绝卸载 /usr/local/Cellar/jpeg/9b,因为当前已安装的 [SNIP] 需要它。
    • @RichardAQuadling 卸载时可以使用--ignore-dependencies 选项。
    • 这似乎并没有解决我的问题。最新的 jpeg 版本目前是 jpeg-9b。遵循@gwg 的说明后,libjpeg.8.dylib 仍然丢失。
    【解决方案9】:

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

    brew install php70 --build-from-source
    

    【讨论】:

      【解决方案10】:

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

      brew uninstall --ignore-dependencies libjpeg
      

      卸载 jpeg/9b:

      brew uninstall --ignore-dependencies jpeg
      

      重新安装 jpeg/9b

      brew install jpeg
      

      【讨论】:

      • 工作,是的!
      【解决方案11】:

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

      【讨论】:

        【解决方案12】:

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

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

        【讨论】:

          【解决方案13】:

          在某些情况下,尤其是在 Catalina 中,用于包的 Homebrew 桶可能存在但未正确链接。在这种情况下尝试:

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

          【讨论】:

            【解决方案14】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-09-02
              • 2021-05-25
              • 2018-04-15
              • 2015-12-18
              • 2021-07-14
              • 2020-04-19
              • 2020-03-19
              相关资源
              最近更新 更多