查找所有 boost 库(exefile
可执行文件的名称在哪里):
$ otool -L exefile
exefile:
@executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
对于每一个libboost_xxx.dylib
,做:
$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile
最后otool
再次验证使用:
$ otool -L exefile
exefile:
/opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
手册页:otool
install_name_tool
编辑 不久前,我编写了一个 python 脚本 ( copy_dylibs.py
) 来在构建应用程序时自动解决所有这些问题。它会将所有库从应用程序包打包/usr/local
或打包/opt/local
到应用程序包中,并修复对这些库的引用以供使用@rpath
。这意味着您可以使用 Homebrew 轻松安装第三方库并轻松打包它们。
我现在已经在github上公开了这个脚本。