我正在尝试为Mac OSX创建应用程序包。我正在使用第三方库(Marble,KDE的一部分,但只为Qt构建)使用自己的自定义插件,我不知道如何处理它。这就是我所做的:
但是,我的应用程序将无法运行。我用DYLD_PRINT_LIBRARIES = 1运行它来查看加载的内容,直到从/Applications/Marble.app/Contents/MacOS/resources/plugins/插入一个插件而不是从我的bundle中的PlugIns目录加载它。此时,插件尝试加载/ Developer Qt库而不是bundle拷贝(以及我在/ usr / local / lib中的libmarblewidget.dylib的副本),它们都崩溃了。
我可能误解了这个问题,但在我看来,问题是第三方库(libmarblewidget.dylib)加载了Marble应用程序包插件,然后将所有内容搞砸了。假设我是正确的,有没有办法告诉这个库使用我的应用程序包中的PlugIns目录?我需要重新编译吗?
答案 0 :(得分:0)
Marble对文件MarbleDirs.cpp中的插件(和数据)位置进行硬编码。插件的预期位置是
bundle.app/Contents/Resources/plugins
和数据:
bundle.app/Contents/Resources/data
只要插件和数据在这些目录中,并且使用install_name_tool修复所有插件的ID和链接,应用程序就可以正常运行,仅链接到捆绑包中的Qt和Marble库。插件是.so文件而不是.dylib的事实似乎不是问题。
在qt.conf中设置插件的价值并不重要,libmarblewidget.dylib将始终在这些位置查找。