1

我正在尝试设置一个服务器来为使用 ImageMagick 和 RMagick gem 的 Ruby 应用程序提供服务。服务器正在运行 OS X 10.10。我有另一台服务器运行与预期相同的所有内容(操作系统、ImageMagick、xz 和 RMagick gem)的相同版本。

但是,每次我尝试从新服务器提供应用程序时,都会收到一条错误消息,提示“无法启动 Web 应用程序”,并带有以下跟踪:

dlopen(/Users/user/.rvm/gems/ruby-2.1.5@app/extensions/x86_64-darwin-14/2.1.0-static/rmagick-2.15.4/RMagick2.bundle, 9):
   Library not loaded: /usr/local/lib/liblzma.5.dylib
Referenced from: /usr/local/opt/imagemagick/lib/libMagickCore-6.Q16.2.dylib
Reason: Incompatible library version: libMagickCore-6.Q16.2.dylib requires version 8.0.0 or later, but liblzma.5.dylib provides version 6.0.0 - /Users/user/.rvm/gems/ruby-2.1.5@app/extensions/x86_64-darwin-14/2.1.0-static/rmagick-2.15.4/RMagick2.bundle (LoadError)

基本上,看起来 ImageMagick 正在寻找版本 8.0.0 的 liblzma,但只找到版本 6.0.0。

ImageMagick 和 xz 是使用 Homebrew 安装的——根据其他回答的问题,xz 包应该有 liblzma 8.0.0。

我曾尝试卸载并重新安装 ImageMagick、rmagick gem 和 xz(提供 liblzma 的软件包),但无济于事。

如果您需要更多信息,请告诉我。


编辑:otool在 /usr/local/lib/liblzma.5.dylib上运行的输出:

otool -L /usr/local/lib/liblzma.5.dylib
/usr/local/lib/liblzma.5.dylib:
  /usr/local/opt/xz/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.2.0)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

我更困惑..它显然超过了 8.0.0 版。

4

1 回答 1

2

好的,我想通了。

出于某种原因,ImageMagick、rmagick 和/或乘客找到了位于/usr/lib的 liblzma.5.dylib 的系统副本,而不是/usr/local/lib的副本自制程序设置(尽管错误消息说正在寻找/usr/local/lib)。

我通过在 liblzma.5.dylib 的两个副本上运行 otool 命令解决了这个问题。

对于/usr/local/lib/liblzma.5.dylib

otool -L /usr/local/lib/liblzma.5.dylib
/usr/local/lib/liblzma.5.dylib:
  /usr/local/opt/xz/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.2.0)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

对于/usr/lib/liblzma.5.dylib

otool -L /usr/lib/liblzma.5.dylib
/usr/lib/liblzma.5.dylib:
  /usr/lib/liblzma.5.dylib (compatibility version 6.0.0, current version 6.3.0)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

系统重新启动后,ImageMagick/rmagick/passenger 开始使用 liblzma.5.dylib 的正确副本。

于 2016-04-28T21:25:18.800 回答