微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决编译的 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 举报,一经查实,本站将立刻删除。