编译器之间的 Qt DLL 兼容性
qt dll compatibility between compilers
Qt 库声明了主要版本的二进制兼容性。但是不同编译器之间的兼容性呢?
例如,我有一个应用程序和 2 个使用 Qt(动态链接)的 dll。但其中一个是用MSVC构建的,另一个是用MinGW构建的。因此,它们链接到Qt库的不同版本(相同版本)。
问题是:这些dll是否可以使用一个共享的Qt dll一起工作?如果不是,那么考虑到更改编译器不是一种选择,有哪些解决方法?
我用依赖 walker 查看了 Qt dll,我看到有几十个导出的函数具有编译器名称重整。因此,似乎不可能使它们一起工作。
C++没有
标准的ABI。这意味着,包含 DLL 文件的二进制文件在编译器之间通常不兼容(它们甚至可能在同一编译器上的不同构建选项之间不兼容......MSVC与MinGW就是这种情况,没有DLL兼容性。
纯 C 库在 Windows 上具有定义的 ABI,因此它们可以与任何编译器一起使用(即使 ABI 兼容,您仍然可能遇到具有不兼容依赖项的库的问题)。
如果重新编译一个库不是一种选择,那么我知道的唯一解决方法是使用单独的进程,然后使用某种 IPC 机制进行通信。如果两个库都提供 GUI 元素,并且您想在同一个 GUI 中混合它们,那是不可能的(或者至少很难,您需要在另一个应用程序的窗口中打开其他应用程序的窗口,有点像叠加层)。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- C++ XE 5 应用程序和C++生成器 5 dll 兼容性
- 潜在 DLL 兼容性问题的摘要?
- 编译器之间的 Qt DLL 兼容性
- 当显式动态链接dll时,使用std::unique_lock会破坏XP的兼容性
- MinGW DLL项目与linux的兼容性
- *.dll *的兼容性.一个*.VisualStudio和gcc之间的lib *.def
- 可以对dll进行更改,同时保持与预编译的可执行文件的兼容性吗?