2017-01-09 256 views
0

我们有一个项目可以动态链接几个dylib。将该版本复制到另一台Mac时。需要在dylib和可执行文件上运行“otool”,以便在“安装”过程中修复共享库路径。dylib到mac osx上的dylib路径,如何使mac上的rpath工作?

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

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

  2. 如果我们不允许运行post安装脚本来解决这个问题,还有其他的选择吗?

回答

0

相对路径应该工作得很好。例如,假设一个macOS应用程序包。该应用程序位于Contents/MacOS中,而图书馆居住在Contents/Frameworks。在这种情况下,你应该将应用程序的库重新链接到这样的东西@executable_path/../Frameworks/library.so。如果您不使用应用程序包,但使用@executable_path的所有文件都在同一个目录中也应该可以工作。

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

而且您当然可以在将您的应用程序打包为.dmg.pkg之前进行这些更改。