dylib 到 mac osx 上的 dylib 路径,如何使 rpath 在 mac 上工作?

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

我们有一个项目动态地 links 针对几个动态库。将构建复制到另一个 mac 时。需要 运行 "otool" 动态库和可执行文件,以便在 "install".

期间修复其中的共享库路径

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

  1. 在 mac 上发布软件的正常方式是什么?即:当 运行 安装 .pkg 或 .dmg 安装程序时,如何确保安装的动态库能够 link 在相对路径中相互对抗? dylib 路径必须用 rpath 或一些 post 安装脚本

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

相对路径应该可以正常工作。例如假设一个 macOS 应用程序包。应用程序位于 Contents/MacOS,而库位于 Contents/Frameworks。在这种情况下,您可以将应用程序的库重新link 成这样@executable_path/../Frameworks/library.so。如果您不使用应用程序包,但所有文件都在同一目录中,那么使用 @executable_path 应该也可以。

无需在这些示例中使用 @rpath。您也可以使用它,但它需要应用程序定义此路径。如果您想分发图书馆并且人们应该 link 到您的图书馆,这可能会有所帮助。这样他们就可以在他们的应用程序中给出一个 @rpath 来找到图书馆而不需要 otool-ing 他们。

您当然会在将应用程序打包成 .dmg.pkg.

之前进行这些更改