Macos osx上不同插件中的不同Qt框架版本
我有一个使用一些Qt框架的插件,比如QtGui.framework和QtCore.framework。我的插件依赖于5.7版,这个版本嵌入在插件包中 另一个插件似乎正在使用这些框架的早期版本(5.5),并导致版本控制冲突。我担心我的插件会找到另一个(位于/Library/Application-Support/…)中,而不是捆绑包中的那个 两个问题:Macos osx上不同插件中的不同Qt框架版本,macos,qt,frameworks,Macos,Qt,Frameworks,我有一个使用一些Qt框架的插件,比如QtGui.framework和QtCore.framework。我的插件依赖于5.7版,这个版本嵌入在插件包中 另一个插件似乎正在使用这些框架的早期版本(5.5),并导致版本控制冲突。我担心我的插件会找到另一个(位于/Library/Application-Support/…)中,而不是捆绑包中的那个 两个问题: otool-L my_plugin说QtGui.framework是由 @rpath/QtGui.framework,而otool-l my_pl
otool-L my_plugin
说QtGui.framework是由
@rpath/QtGui.framework,而otool-l my_plugin
的输出有一个命令,该命令将LC_rpath
作为@loader_path/。/Frameworks
。如果@loader\u path
指向我的插件,为什么会找到其他插件的框架只要插件使用二进制兼容的Qt版本,就应该尽一切努力确保它们只加载一个版本的Qt。否则事情就会破裂:Qt在其外部接口上只与二进制兼容。Qt模块之间不兼容,当同一进程中链接了不同的Qt版本,而对象在它们之间进行交换时,您将经历大量的中断。根本不支持它。我知道,最坏的情况是,它会很脆。那么,在面向插件的环境中,任何数量的插件都可以使用不同版本的Qt,那么这里的最佳实践是什么呢?只要插件使用二进制兼容的Qt版本,您就可以强制插件链接到链接到应用程序的Qt版本,并且只链接到该版本。这是Mac OS特有的,需要额外的代码才能完成。