在mac osx上使用dylib到dylib路径,如何让rpath在mac上运行?

时间:2017-01-09 18:25:05

标签: macos dylib dmg rpath

我们有一个动态链接几个dylib的项目。将构建复制到另一个mac时。一个人需要运行" otool"在dylibs和可执行文件上,以便在" install"期间修复它们中的共享库路径。

看起来OSX对DLL到DLL路径有一些奇怪的要求,这使得相对路径不起作用(即:使用rpath)。我的问题在这里:

  1. 在mac上发布软件的正常方法是什么?即:当运行.pkg或.dmg安装程序时,如何确保安装的dylib能够在相对路径中相互链接?必须使用rpath或某些安装后脚本修复dylib路径

  2. 如果我们不允许运行安装后脚本来修复此问题,还有哪些其他选项?

1 个答案:

答案 0 :(得分:1)

相对路径应该可以正常工作。例如,假设一个macOS应用程序包。当图书馆位于Contents/MacOS时,该应用程序位于Contents/Frameworks。在这种情况下,您可以将应用程序的库重新链接到此类@executable_path/../Frameworks/library.so之类的内容。如果您不使用应用程序包但使用@executable_path简单地将所有文件放在同一目录中也应该有效。

在这些示例中无需使用@rpath。您也可以使用它,但它需要应用程序来定义此路径。如果您要分发库并且人们应该链接到您的库,这可能会有所帮助。这样他们就可以在他们的应用程序中为@rpath找到没有otool的库。

当然,您在将应用程序打包成.dmg.pkg之前进行了这些更改。