Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos osx上不同插件中的不同Qt框架版本_Macos_Qt_Frameworks - Fatal编程技术网

Macos osx上不同插件中的不同Qt框架版本

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

我有一个使用一些Qt框架的插件,比如QtGui.framework和QtCore.framework。我的插件依赖于5.7版,这个版本嵌入在插件包中

另一个插件似乎正在使用这些框架的早期版本(5.5),并导致版本控制冲突。我担心我的插件会找到另一个(位于/Library/Application-Support/…)中,而不是捆绑包中的那个

两个问题:

  • otool-L my_plugin
    说QtGui.framework是由 @rpath/QtGui.framework,而
    otool-l my_plugin
    的输出有一个命令,该命令将
    LC_rpath
    作为
    @loader_path/。/Frameworks
    。如果
    @loader\u path
    指向我的插件,为什么会找到其他插件的框架

  • 两个插件甚至可以在同一个过程中加载单独的Qt框架版本吗?这个问题是针对Qt的,但我认为它一般适用于任何MacOS框架。我不想阻止其他插件工作;我只想独立工作


  • 只要插件使用二进制兼容的Qt版本,就应该尽一切努力确保它们只加载一个版本的Qt。否则事情就会破裂:Qt在其外部接口上只与二进制兼容。Qt模块之间不兼容,当同一进程中链接了不同的Qt版本,而对象在它们之间进行交换时,您将经历大量的中断。根本不支持它。我知道,最坏的情况是,它会很脆。那么,在面向插件的环境中,任何数量的插件都可以使用不同版本的Qt,那么这里的最佳实践是什么呢?只要插件使用二进制兼容的Qt版本,您就可以强制插件链接到链接到应用程序的Qt版本,并且只链接到该版本。这是Mac OS特有的,需要额外的代码才能完成。