41

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

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

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

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

4

2 回答 2

68

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

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 dyldman install_name_tool了解更多信息。

于 2012-02-13T16:05:30.830 回答
12

还有一个名为 MacDependency 的 GUI 工具,它将公开所有依赖库(https://github.com/kwin/macdependency/)。

于 2015-07-25T17:40:15.583 回答