这非常令人困惑。我花了很多时间在Stack等网站上阅读文章,但仍然感到困惑。
我正在使用Qt和C++进行编码。在Qt中,我使用gcc选项作为编译器。
问题是,我尝试过许多第三方库,但它们似乎都不能正常工作。
我对.dll、.a、.lib、.def文件和库架构很陌生。
问题1:
根据我的有限经验(到目前为止我已经尝试了7或9个库),库的供应商很少告诉你.dll是由VisualStudio还是gcc制作的。这增加了很多困惑。他们几乎从不明确说明库与哪个编译器兼容。所以我会欣赏一些关于如何处理这个噩梦的实际建议。我尝试过的几乎所有库都是开源项目。我不会在这里点名,但这些都是知名项目。我相信问题出在我缺乏知识上...
MinGW和gcc世界
问题2:
据我所知,MinGW gcc宇宙中的动态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 World
问题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:
如果我在Qt Creator中选择VisualStudio编译器,这是否与其他人使用真正的VisualStudio编译器编译的动态库100%兼容?我相信Qt Creator中的VisualStudio编译器选项是虚假的。
问题15:
如果我在QtCreator中选择MinGW/gcc编译器,是否可以将其与其他人使用真正的VisualStudio编译器编译的Qt动态库一起使用?
问题16:
我在Qt项目中使用MinGW/gcc时不需要*.def文件来使用*.dll,对吧?
问题17:
我能否将使用真正的VisualStudio制作的*lib(适用于*.dll和*.h)文件转换为*.a文件,以便我可以在Qt gcc项目中使用未修改的*.dll和*.h文件?
*.so
动态链接的设计比Windows中的*.dll
+*.lib
+*.def
更好。 - Basile Starynkevitch