我正在使用最新版本的Xcode 4开发Cocoa应用程序,我想将动态库链接到我的项目(dylibs
)。
我在某处读到在我的项目中添加库是不够的,因为我必须运行install_name_tool
和otool
才能使我的项目使用我项目中捆绑的库。
我已阅读install_name_tool
的手册页,但我不明白为什么我必须这样做。
图书馆如何运作?特别感兴趣的是应用程序和库具有指向我机器中特定位置的路径的部分,例如/usr/local/lib/mylibrary.dylib
时运行otool -L
答案 0 :(得分:58)
Apple有几种查找共享库的方法:
@executable_path
:相对于主要的可执行文件@loader_path
:相对于引用二进制文件@rpath
:相对于任何路径列表。 @rpath
是OS X 10.5中引入的最新版本。
例如,如果您希望将Contents/MacOS
中的可执行文件和Contents/Libraries
中的库放在一起,则可以执行以下操作:
install_name_tool -id @rpath/Libraries/lib_this.dylib builddir/lib_this.dylib
并在顶级可执行文件集rpath
中添加:
install_name_tool -add_rpath @loader_path/.. myexecutable
和
install_name_tool -change builddir/lib_this.dylib @rpath/Libraries/lib_this.dylib myexecutable
注意:-change
之后的第一个路径必须与二进制文件中当前的路径完全匹配。
如果您迷路了otool -l -v myexecutable
将告诉您当前在可执行文件中的确切加载命令。
有关详细信息,请参阅man dyld
和man install_name_tool
。
答案 1 :(得分:8)
还有一个名为MacDependency的GUI工具,它将公开所有依赖库(https://github.com/kwin/macdependency/)。