dylib to dylib pathing on mac osx, how to make rpath work on



我们有一个动态链接到多个dylibs的项目。将构建复制到另一台 Mac 时。需要在dylibs和可执行文件上运行"otool",以便在"安装"期间修复其中的共享库路径。

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

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

  2. 如果我们不允许运行安装后脚本来解决此问题,还有什么其他选择?

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

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

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

相关内容

  • 没有找到相关文章

最新更新