我正在使用最新版本的 Xcode 4 开发 Cocoa 应用程序,我想将动态库链接到我的项目(dylibs
).
我在某处读到,在我的项目中添加库是不够的,因为我必须运行install_name_tool
and otool
使我的项目使用捆绑在我的项目中的库。
我已经阅读了手册页install_name_tool
,但我不明白为什么我必须这样做。
图书馆如何运作?对应用程序和库具有指向我的计算机中特定位置的路径的部分特别感兴趣,例如/usr/local/lib/mylibrary.dylib
跑步时otool -L
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
with:
install_name_tool -add_rpath @loader_path/.. myexecutable
and:
install_name_tool -change builddir/lib_this.dylib @rpath/Libraries/lib_this.dylib myexecutable
注意:之后的第一条路径-change
必须与二进制文件中当前的内容完全匹配。
如果你迷路了otool -l -v myexecutable
会告诉您可执行文件中当前到底有哪些加载命令。
See man dyld
and man install_name_tool
了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)