编译的 dylib 的版本与我的可执行文件所需的版本不匹配 其他信息编辑

问题描述

我正在尝试捆绑我的 Mac 应用程序以在各种系统上分发。我正在 Apple Silicon 上构建,但我希望我的应用程序与 x86_64 系统兼容并具有一些向后兼容性(例如 10.11)。我没有使用 Xcode。

使用 otool -L path/to/executable 我发现我的应用程序需要 libtiff.5.dylib,我不能假设用户会安装它。所以我的想法是为我的目标系统(macOS 10.11、x86_64)编译 dylib 并将其与应用程序捆绑在一起。

$ otool -L path/to/executable
/usr/local/opt/libtiff/lib/libtiff.5.dylib (compatibility version 13.0.0,current version 13.0.0)

我已经下载并编译了 libtiff dylib,但是当我再次运行 otool 时,我发现该版本与上面的兼容版本不匹配。

$ otool -L path/to/libtiff.5.dylib
@rpath/libtiffxx.5.dylib (compatibility version 5.0.0,current version 5.7.0)

当我将 dylib 与我的可执行文件捆绑在一起并使用 install_name_tool 更改我的可执行文件的 dylib 路径时,我得到了预期的错误

Library not loaded: @executable_path/../Frameworks/libtiff.5.dylib
  Referenced from: /path/to/bundle.app/Contents/MacOS/executable
  Reason: Incompatible library version: executable requires version 13.0.0 or later,but libtiff.5.dylib provides version 5.0.0

我似乎不明白 dylib 版本控制是如何工作的。我如何获得 13.0.0 版本?如果 libtiff.5.dylib 的名称中已经有 5,我为什么还要期待 13.0.0 版本?如果 libtiff 的官方版本是 4.3,我为什么还要期待版本 5?

其他信息

我直接从 gitlab page 下载了 libtiff 源代码。也许这是一个错误,我应该去其中一个版本?

我一直在使用 cmake 使用以下变量构建库:

$ cmake ./ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DCMAKE_OSX_ARCHITECTURES=x86_64

之后我运行 make 并将新创建的 dylib 文件复制到我的 appbundle 中。我试过在没有 cmake 变量的情况下编译 dylib,但我得到了相同的结果。

编辑

我之前根据this page使用cmake编译dylib。但是,当我创建一个构建目录并从那里运行 ../configure 时,生成的 dylib 具有正确的版本。这引入了另一个问题,即我只获得了 arm64 架构的 dylib,而不是 x86_64。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)