Qt(MinGW ) Windows下创建动态库

Qt(MinGW ) Windows下创建动态库

Qt(MinGW ) Windows下创建动态库

 
1 人赞同了该文章

 

上一次和大家分享的是Linux下Qt创建共享库并链接共享库,这次和大家分享的是Windows下Qt创建共享库并链接共享库。大家肯定注意到标题中Qt后面括号中的minGW,为什么要加上minGW呢?先卖个关子,后面的介绍中会解释的。

 

在上一篇文章中【Linux下Qt创建共享库并链接共享】共享库的创建与链接都已经有了详细的步骤,所以本次文章中就不再赘述,主要说一下不同的地方。

 

  1. 创建共享库

 

  1. 工程文件.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文件,在运行过程中使用。

 

二、链接动态库

  1. 添加动态库

注意下这里面的库文件选择的是刚才生成的.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文件,这个就之后再了解了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章