问题描述
我有一个已编译的程序 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.dylib
。 ls -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
启动正常。
目标是修改 Makefile
的 mybinary
,使其链接到 libicuuc.dylib
。
我该怎么做?
mybinary
在 tar 文件中部署给最终用户,与 tar 文件中的 mybinary
相比,他们更有可能拥有更新版本的 icu4c(在本例中为 69)(在这个例子中,68)。
-
有没有办法在编译时告诉链接器我想使用
libicuuc.dylib
(文件名中没有版本号)?如果此行为随后应用于其他链接库,那就没问题了,即,我不需要特定于libicuuc.dylib
。 -
如果这不可能,我可以修改
Makefile
以运行install_name_tool
但我的困境是似乎没有一种简单的方法来获得 {{1 }}。它不是编译控制台输出的一部分,解析libicuuc.68.dylib
的输出会很麻烦。有没有什么简单而优雅的方法可以让otool -L mybinary
传递给libicuuc.68.dylib
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)