Qt(MinGW ) Windows下创建动态库
上一次和大家分享的是Linux下Qt创建共享库并链接共享库,这次和大家分享的是Windows下Qt创建共享库并链接共享库。大家肯定注意到标题中Qt后面括号中的minGW,为什么要加上minGW呢?先卖个关子,后面的介绍中会解释的。
在上一篇文章中【Linux下Qt创建共享库并链接共享】共享库的创建与链接都已经有了详细的步骤,所以本次文章中就不再赘述,主要说一下不同的地方。
- 创建共享库
- 工程文件.pro的修改
QT -= core gui
TARGET = TestLib
TEMPLATE = lib
DESTDIR = $$PWD/dll
DEFINES += CREATEDLL_LIBRARY
SOURCES += testadd.cpp
HEADERS += testadd.h
unix {
target.path = /usr/lib
INSTALLS += target
}
与Linux下相比,去掉了版本号的设置,因为添加上不起作用。。相比Linux下,添加了DESTDIR = $$PWD/dll,这是目标目录,会把生成的文件放到该目录下。这里没有区分debug版本与release版本。
2. 生成共享库的效果
由于我们在pro中指定了生成路径,所以生成的文件都在dll文件中。这里面要注意的是,生成的有两个文件,一个是.a文件,在链接过程中使用,另一个是.dll文件,在运行过程中使用。

二、链接动态库
- 添加动态库
注意下这里面的库文件选择的是刚才生成的.a文件。默认勾选了为debug版本添加’d’作为后缀。

2. 编译、运行过程中的问题
①编译过程中出现的问题
../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lTestLibd
什么情况?没有找到这个文件?再一看,后面多了一个d,默默地删掉解决问题。
因为刚才勾选了为debug版本添加’d’作为后缀。。
②运行直接崩溃
生成库的时候不还有一个文件么,这时候它就该起作用了。将它与.exe(可执行文件)放到同一目录下或者配置系统的环境变量都可以。

③结果如下
不知道大家能不能看出是Windows风格的?

后记总结:
①对比Linux与Windows,在运行时缺少库的情况下Linux会提示,Windows则没 有。不过掌握了动态库的使用方法后,这些都是可以规避的。
②之前看到别人链接库的后缀是.lib,难道是他错了?或者是我错了?可是我的能正常运行啊,但是我又看到的不止一个人链接的是.lib?于是我的求知欲再次被激起,查了下.a 、 .lib 、 .dll等的区别,最终发现是编译工具的不同所导致。
用mingw的会生成.a和.dll后缀的,他们用的是msvc,所以生成的是.lib和.dll。下面的图片是Qt的安装包,可以看到不同安装包所用的编译工具的不同。
所以这也是我为什么要在标题中加入MinGW的原因了。另外,使用MinGW的工程也可以直接链接.lib文件,这个就之后再了解了。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-04-02 [.NET] ConfuserEx脱壳工具打包
2023-04-02 .Net零基础逆向教程 第三课(壳与作业)
2023-04-02 给大家推荐一个.Net的混淆防反编译工具ConfuserEx
2023-04-02 .net反编译的九款神器
2023-04-02 ConfuserEx 脱壳软件 使用教程
2023-04-02 开源.net 混淆器ConfuserEx介绍
2023-04-02 使用ConfuserEx加密混淆程序以及如何脱壳反编译