编译器之间的qt dll兼容性

时间:2016-02-19 04:11:50

标签: c++ windows qt abi

Qt库说明主要版本之间的二进制兼容性。但是不同编译器之间的兼容性呢?

例如,我有一个应用程序和2个使用Qt(动态链接)的dll。但其中一个是用MSVC构建的,另一个是用MinGW构建的。因此,它们链接到不同版本的Qt库(相同版本)。

问题是:这些dll是否可以使用一个共享的Qt dll一起工作? 如果没有,那么考虑到更改编译器不是一种选择可能会有什么变通方法呢?

我用依赖walker查看了Qt dll,我发现有很多导出的函数都有编译器特定的名称。所以似乎不可能让它们一起工作。

1 个答案:

答案 0 :(得分:2)

C ++没有标准的ABI。这意味着,包含DLL文件的二进制文件通常在编译器之间不兼容(它们甚至可能在同一编译器上的不同构建选项之间不兼容......)。这是MSVC与MinGW的情况,没有DLL兼容性。

普通C库在Windows上具有已定义的ABI,因此它们可能与任何编译器一起使用(即使ABI兼容,您仍可能遇到具有不兼容依赖性的库的问题。)

如果不能重新编译一个库,那么我所知道的唯一解决方法是使用单独的进程,然后使用某种IPC机制进行通信。如果两个库都提供了GUI元素,并且你想将它们混合在同一个GUI中,那是不可能的(或者至少它很难,你需要在另一个应用程序的窗口中打开其他应用程序的窗口,有点像覆盖)。