我们有一个动态链接到多个dylibs的项目。将构建复制到另一台 Mac 时。需要在dylibs和可执行文件上运行"otool",以便在"安装"期间修复其中的共享库路径。
看起来OSX对DLL到DLL路径有一些奇怪的要求,这使得相对路径在其中不起作用(即:使用rpath)。我的问题在这里:
-
在 Mac 上交付软件的正常方式是什么? 即:当运行.pkg或.dmg安装程序时,如何确保安装的 dylib 能够在相对路径中相互链接? 必须使用 RPATH 或某些安装后脚本修复 Dylib 路径
-
如果我们不允许运行安装后脚本来解决此问题,还有什么其他选择?
相对路径应该可以正常工作。例如,假设一个 macOS 应用程序捆绑包。应用程序位于Contents/MacOS
中,而库位于Contents/Frameworks
。在这种情况下,您可以将应用程序的库重新链接到类似以下内容@executable_path/../Frameworks/library.so
。如果您不使用应用程序捆绑包,但将所有文件都放在同一个目录中,则使用@executable_path
也应该可以工作。
在这些示例中无需使用@rpath
。 您也可以使用它,但它需要应用程序定义此路径。如果您想分发库并且人们应该链接到您的库,这可能会有所帮助。这样,他们可以在应用程序中提供@rpath
来查找库,而无需otool
- 它们。
当然,在将应用程序打包到.dmg
或.pkg
之前,您还要进行这些更改。