似乎 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)之后,它并没有改变任何东西。
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
的文档。