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

问题描述 投票:0回答:1

我正在尝试将新的 dylib 链接到我的可执行文件,但它使用绝对路径(

/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)
xcode macos linker shared-libraries
1个回答
3
投票

对于 macos 和 Mach-O 二进制文件,

install_name_tool
命令可以更改动态链接库。

  • -change old new binary
    选项将更改一个或多个库的位置。
  • -rpath old new binary
    会将 rpath 重置为新路径。
  • -delete_rpath old binary
    将删除当前的。
  • -add_rpath new 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)
© www.soinside.com 2019 - 2024. All rights reserved.