【发布时间】:2012-01-30 18:25:42
【问题描述】:
这很令人困惑。我花了很多时间在堆栈等上阅读有关此的帖子。仍然感到困惑。
我正在使用 Qt 和 C++ 进行编码。在 Qt 中,我将 gcc 选项用于编译器。
问题是我尝试过的许多第 3 方库似乎都不起作用。
我是 .dll、.a、.lib、.def 文件和库方案的新手。
问题一:
根据我有限的经验(到目前为止,我已经尝试了 7 或 9 个库),库的供应商很少告诉您 .dll 是用 VisualStudio 还是 gcc 制作的。这增加了很多混乱。他们几乎从未明确说明该库与哪种编译器兼容。所以我会很感激一些关于如何处理这个噩梦的现实生活中的提示。我尝试的几乎所有库都是开源项目。我不会在这里命名,但这些都是众所周知的项目。我确定问题是我缺乏知识...
MinGW 和 gcc 世界
问题2:
据我所知,MinGW gcc Universe 的动态 C++ 库需要这些,对吗?
*.h
*.dll
*.a
问题 3:
不幸的是,.a 文件经常丢失,并且该库无法正常工作。这非常令人困惑。如果 .a 文件丢失,我不走运吗?
问题 4:
如果 *.dll 是用 gcc 制作的,我可以为 MinGW/gcc 生成 .a 文件吗?
问题 5: 如果 *.dll 是用 VisualStudio 制作的,我可以为 MinGW/gcc 生成 .a 文件吗?
问题 6:
是否可能是 *.dll(使用 MinGW/gcc 制作)太旧,不再与新的 MinGW/gcc 兼容?
问题 7:
使用 MinGW/gcc 的 Qt 项目永远不需要 *.lib 文件,对吗?那是 VisualStudio 唯一的东西,对吧?
问题 8:
在使用 MinGW/gcc 的 Qt 项目中,我不需要 *.def 文件来使用 *.dll,对吧?
VisualStudio 世界
问题 9:
据我所知,VisualStudio 的动态 C++ 库需要这些:
*.h
*.dll
*.lib
对吗?同样,问题是 *.lib 文件几乎总是丢失。另外,没有关于库与什么编译器兼容的明确说明。那么我怎么知道它是否仅适用于 VisualStudio?
问题 10:
如果 .lib 文件丢失,我不走运吗?
问题 11:
如果 *.dll 是用 VisualStudio 制作的,我可以为 VisualStudio 生成 .lib 文件吗?怎么样?
问题 12:
如果 *.dll 是用 MinGW/gcc 制作的,我可以为 VisualStudio 生成 .lib 文件吗?怎么样?
问题 13:
是否有可能是 *.dll(使用 VisualStudio 制作)太旧,不再与较新的 VisualStudio 兼容?
问题 14:
如果在 QtCreator 中我选择了 VisualStudio 编译器,那是否与其他人使用 REAL VisualStudio 编译的动态库 100% 兼容?我相信 Qt Creator 中的 VisualStudio 编译器选项是一个假的 VisualStudio 编译器。
问题 15:
如果在 QtCreator 中我选择了 MinGW/gcc 编译器,我可以与其他人用 REAL VisualStudio 编译的 Qt 动态库一起使用吗?
问题 16:
在使用 MinGW/gcc 的 Qt 项目中,我不需要 *.def 文件来使用 *.dll,对吧?
问题 17: 我可以将使用 REAL VisualStudio 制作的 *lib(与 *.dll 和 *.h 一起使用)文件转换为 *.a 文件,以便我可以将 *.a 文件与未修改的 *.dll 和 *.h 一起使用Qt gcc 项目中的文件?
【问题讨论】:
-
我相信这种复杂性是 Windows 特有的。在 Linux 上使用 Qt 时你不会拥有它!
-
您可能希望将其分解为多个问题(特别是“如果我有 Y,我可以生成 X”的变体)......可能很多人都可以回答其中一些问题,如果你问他们单独(因为它们与 Qt 完全无关)关于 Windows 链接,您可能会得到更快的响应。话虽如此,我能给你的最短答案是如果你不需要,不要使用 MinGW - VisualStudio 是平台上支持的规范,你将有更好的体验从长远来看(如果在短期内与开源库依赖关系有些痛苦)。
-
-1:一次问 16 个问题。
-
@Nicol:我没有一次问 16 个问题。我将 1 个问题分成不同的小部分,这样细节就不会丢失。我的问题是关于这里的 dll 兼容性。兼容性是一个宏观概念。
-
@Basile - 但是尝试在 Linux 上运行 Visual Studio(使用 wine?)会更加复杂。使用操作系统的本机编译器总是容易得多。 :-)
标签: c++ qt visual-c++ gcc mingw