一、动态库是什么
很多人写程序的人都见过.lib和.dll文件,对动态库也略有耳闻。
生成动态库后可以得到两个文件,后缀名分别是.lib以及.dll。
简而言之,.lib称为导入库,相当于头文件;.dll是动态库文件,相当于cpp,头文件中函数的具体实现。
二、为什么使用动态库
使用动态库的优点很多,可以减少可执行文件的大小、实现资源共享、便于维护。比如在MFC中调用Qt。
关于动态库与静态库的更多详细介绍,可以参开这篇文章——c++静态库与动态库
三、如何生成动态库
1.一个简单qt界面
我们的目标是创建这个界面的动态库,然后在其它程序中引入动态库,把该界面显示出来。
程序结构如下:
其中包括头文件、实现文件,以及界面ui文件,程序的主界面类DllTestWidget。
2.创建工程,准备动态库导出
a.创建完工程之后,设置工程属性。
b.链接器-常规-输出文件,设置动态库文件.dll生成路径。
c.链接器-高级-导入库,设置导入库文件.lib生成路径。
上面这些只是设置生成路径,如果不修改的话,一般生成在默认路径win32文件夹下。
3.编写程序,生成动态库
#ifdef TESTWIDGET_LIB # define TESTWIDGET_EXPORT __declspec(dllexport) #else # define TESTWIDGET_EXPORT __declspec(dllimport) #endif
如果生成的动态库,以后仍然供Qt使用,则直接加上上面的代码,导出该类即可;
如果不希望包含ui文件,则将其放入.cpp文件中即可;
如果生成的动态库以后在非Qt的环境下使用,则需要新建一个纯虚类,让Qt类继承它,实现其共有的虚函数即可。
四、如何使用动态库
1.配置属性-调试-环境 加入生成.dll动态库目录路径。
2.C/C++-常规-附加包含目录 加入所需头文件.h路径。
3.链接器-常规-附加库目录 增加生成的导入库.lib的路径。
4.链接器-输入-附加依赖库 最后加入生成的导入库.lib文件。
按照上面的设置,我们便可以在其它地方使用之前生成的动态库啦。