gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:48:09 27 4
gpt4 key购买 nike

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

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

我已阅读 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:

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

关于macos - 为什么 Mac OS X 中的 Mach-O 库需要 install_name_tool 和 otool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com