我们有一个动态链接几个dylib的项目。将构建复制到另一个mac时。一个人需要运行" otool"在dylibs和可执行文件上,以便在" install"期间修复它们中的共享库路径。
看起来OSX对DLL到DLL路径有一些奇怪的要求,这使得相对路径不起作用(即:使用rpath)。我的问题在这里:
在mac上发布软件的正常方法是什么?即:当运行.pkg或.dmg安装程序时,如何确保安装的dylib能够在相对路径中相互链接?必须使用rpath或某些安装后脚本修复dylib路径
如果我们不允许运行安装后脚本来修复此问题,还有哪些其他选项?
答案 0 :(得分:1)
相对路径应该可以正常工作。例如,假设一个macOS应用程序包。当图书馆位于Contents/MacOS
时,该应用程序位于Contents/Frameworks
。在这种情况下,您可以将应用程序的库重新链接到此类@executable_path/../Frameworks/library.so
之类的内容。如果您不使用应用程序包但使用@executable_path
简单地将所有文件放在同一目录中也应该有效。
在这些示例中无需使用@rpath
。您也可以使用它,但它需要应用程序来定义此路径。如果您要分发库并且人们应该链接到您的库,这可能会有所帮助。这样他们就可以在他们的应用程序中为@rpath
找到没有otool
的库。
当然,您在将应用程序打包成.dmg
或.pkg
之前进行了这些更改。