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 (将#修改为@)