为什么 Mac OS X 中的 Mach-O 库需要 install_name_tool 和 otool?

2024-02-19

我正在使用最新版本的 Xcode 4 开发 Cocoa 应用程序,我想将动态库链接到我的项目(dylibs).

我在某处读到,在我的项目中添加库是不够的,因为我必须运行install_name_tool and otool使我的项目使用捆绑在我的项目中的库。

我已经阅读了手册页install_name_tool,但我不明白为什么我必须这样做。

图书馆如何运作?对应用程序和库具有指向我的计算机中特定位置的路径的部分特别感兴趣,例如/usr/local/lib/mylibrary.dylib跑步时otool -L


Apple 有几种定位共享库的方法:

  1. @executable_path:相对于主可执行文件
  2. @loader_path:相对于引用的二进制文件
  3. @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(使用前将#替换为@)

为什么 Mac OS X 中的 Mach-O 库需要 install_name_tool 和 otool? 的相关文章

随机推荐