链接新的 dylib 时删除默认搜索路径。

Remove default search path when linking new dylib.

我正在尝试 link 将新的 dylib 添加到我的可执行文件中,但它 link 它具有绝对路径 (/usr/local/lib/) 如何从使用的共享中删除此默认路径图书馆?

otool -L ../Build/Products/Debug/myexec

../Build/Products/Debug/myexec:
/usr/local/lib/libmylib.dylib (compatibility version 1.0.0, current version 1.0.0)

在 OS X 上,install_name_tool 命令可以更改动态 link 库。

  • -change old new binary 选项将更改一个或多个库的位置。
  • -rpath old new binary 会将 rpath 重置为新路径。
  • -delete_rpath old binary 将删除当前的。
  • -add_rpath new binary 将添加一个新路径。

不过,可能会有一个小问题:这个命令行工具好像只能设置binary的rpath,不能设置系统的rpath,所以/usr/local/lib不能被-delete_rpath选项去掉。

在这种情况下,唯一的选择是-change old new

检查 rpath:

$ otool -l that_exec |grep -C 5 LC_RPATH
      cmd LC_DATA_IN_CODE
  cmdsize 16
  dataoff 13152
 datasize 0
Load command 40
          cmd LC_RPATH
      cmdsize 32
         path /the_binarys_rpath/here (offset 12)