Macos OSX部署:第三方库在/应用程序中加载插件(自定义),而不是捆绑
我正在尝试为MacOSX创建一个应用程序包。我正在使用一个第三方库(Marble,KDE的一部分,但只为Qt构建),它使用自己的自定义插件,我不知道如何处理这个问题。以下是我所做的:Macos OSX部署:第三方库在/应用程序中加载插件(自定义),而不是捆绑,macos,qt,plugins,Macos,Qt,Plugins,我正在尝试为MacOSX创建一个应用程序包。我正在使用一个第三方库(Marble,KDE的一部分,但只为Qt构建),它使用自己的自定义插件,我不知道如何处理这个问题。以下是我所做的: 编译我的包 使用macdeployqt将Qt库复制到捆绑包中,并告诉二进制文件使用这些库(这似乎是将Marble library libmarblewidget.dylib复制到应用程序捆绑包中,并修复其库依赖关系) 将Marble插件复制到bundle.app/Contents/plugins/Marble(其中
我可能误解了这个问题,但在我看来,问题在于第三方库(libmarblewidget.dylib)加载了Marble应用程序包插件,这会把一切都搞糟。假设我是正确的,有没有办法告诉这个库使用我的应用程序包中的PlugIns目录?我需要重新编译吗?大理石硬编码文件MarbleDirs.cpp中的插件(和数据)位置。插件的预期位置为
bundle.app/Contents/Resources/plugins
至于数据:
bundle.app/Contents/Resources/data
只要插件和数据在这些目录中,并且所有插件的ID和链接都使用install_name_工具修复,应用程序就会正常运行,只链接到捆绑包中的Qt和Marble库。插件是.so文件而不是.dylib,这似乎不是问题
在qt.conf中,插件的值设置为什么并不重要,libmarblewidget.dylib将始终查看这些位置。如果您在插件dylib上运行otool-L,它是否有指向插件的路径,您可以使用install\u name\u工具设置这些路径?您是指库dylib吗?不管怎样,我已经在插件(.so文件)和库上运行了otool-L,显示的所有内容要么在bundle(@executable\u path/./something)中,要么在系统(不是Qt)库中。您已经提到了插件(.so文件)。如果它们是linux使用的共享library.so文件,这将是一个问题,因为OSX不使用该格式,但有自己的二进制类型Mach-O。这包含动态链接器dyld修复动态库调用的头。看这里:我知道,但这就是Marble库编译插件的方式(即使在MacOSX上)。实际上,只要我不修改包来使用包库,它们在Marble应用程序中以及在我的应用程序中都可以正常加载。这是因为插件的位置基本上是硬编码到库中的。我会发布一个完整的解决方案,一旦我整理了一些细节。