我有一个编译的程序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
我希望它在libicuuc.dylib
没有“.68”的情况下查看。一个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
formybinary
使其链接到libicuuc.dylib
. 我怎样才能做到这一点?
mybinary
在 tar 文件中部署给最终用户,与 tar 文件(在本例中为 68)相比,他们更有可能拥有更新版本的 icu4c(在本例中为 69 mybinary
)。
有没有办法在编译时告诉链接器我想使用
libicuuc.dylib
(文件名中没有版本号)?如果此行为随后应用于其他链接库会很好,即我不需要将它专门用于libicuuc.dylib
.如果那不可能,我可以
Makefile
修改. 它不是编译控制台输出的一部分,解析输出会很混乱。有没有简单而优雅的方式来传递给?install_name_tool
libicuuc.68.dylib
otool -L mybinary
libicuuc.68.dylib
install_name_tool