在OS X上使用相对路径或库名称引用共享库?

时间:2014-02-19 04:49:59

标签: macos shared-libraries

OS X上的共享库似乎被引用为绝对路径:

$ otool -L /bin/ls
/bin/ls:
    /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

在Linux上,库大多被引用为其名称。我可以改变这种行为吗?

谢谢!

编辑:我检查了FreeBSD,它的工作方式与Linux相同。我想知道它是否只是链接器的问题,但是在OS X上使用gcc(不是clang)后,它没有改变任何东西。

1 个答案:

答案 0 :(得分:1)

您可以使用install_name_tool修正这些路径。首选使用-id选项在共享库上执行此操作,但您也可以使用-change修复可执行文件。有关详细信息,请参阅man install_name_tool

我将共享库上的安装名称更改为@loader_path/libfoo.1.2.3.dylib,并使用可执行文件重新分发libfoo.1.2.3.dylib。如果您在网上搜索rpath executable_path loader_path,那么您会找到有关这些@paths的文档。