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

dyld:库未加载:/usr/local/opt/icu4c/lib/libicuuc.68.dylib 原因:找不到图像

如何解决dyld:库未加载:/usr/local/opt/icu4c/lib/libicuuc.68.dylib 原因:找不到图像

我有一个已编译的程序 mybinary,当我尝试运行它时,它立即失败并显示“找不到图像”。问题不是缺少动态库的路径,而是它需要查看不包含版本号的库名称。 >

在执行 mybinary 时,我得到了这个(为简洁起见进行了编辑):

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuuc.68.dylib
Reason: image not found

运行 otool -L mybinary 显示了这一点(为简洁起见也进行了编辑):

/usr/local/opt/icu4c/lib/libicuuc.68.dylib

我希望它在没有“.68”的情况下查看 libicuuc.dylibls -1 表明它存在:

/usr/local/opt/icu4c/lib/libicuuc.69.1.dylib
/usr/local/opt/icu4c/lib/libicuuc.69.dylib
/usr/local/opt/icu4c/lib/libicuuc.a
/usr/local/opt/icu4c/lib/libicuuc.dylib

因为 mybinary 中引用的版本是 68(低于 69,因此防止 Incompatible library version),我可以通过执行以下操作来修复 mybinary

sudo install_name_tool -change /usr/local/opt/icu4c/lib/libicuuc.68.dylib /usr/local/opt/icu4c/lib/libicuuc.dylib mybinary

现在,mybinary 启动正常。

目标是修改 Makefilemybinary,使其链接libicuuc.dylib。 我该怎么做?

mybinary 在 tar 文件中部署给最终用户,与 tar 文件中的 mybinary 相比,他们更有可能拥有更新版本的 icu4c(在本例中为 69)(在这个例子中,68)。

  1. 有没有办法在编译时告诉链接器我想使用 libicuuc.dylib文件名中没有版本号)?如果此行为随后应用于其他链接库,那就没问题了,即,我不需要特定于 libicuuc.dylib

  2. 如果这不可能,我可以修改 Makefile 以运行 install_name_tool 但我的困境是似乎没有一种简单的方法来获得 {{1 }}。它不是编译控制台输出的一部分,解析 libicuuc.68.dylib输出会很麻烦。有没有什么简单而优雅的方法可以让 otool -L mybinary 传递给 libicuuc.68.dylib

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。