2013/1/4
今天同事向我要我的程序的链接库,我很无语,因为手头工作很忙,下午头又晕,还是硬着头皮弄吧,一开始对链接库有一点点了解,但是自己没有做过,生成了dll文件总是测试出错,现在搞定了,记录下来
生成静态链接库:修改pro文件
TEMPLATE = lib //应用程序是app
CONFIG += staticlib
然后编译 会弹出对话框 Executable For Debug Session对话框 我表示一开始我对于这个对话框很是迷茫,后来查资料才知道是:
这个告诉你,DLL已经编译好了,要你选用哪个应用来调用!!
接着就到本程序的Debug文件夹下生成了一个: xx.lib文件 这就是生成的库文件
使用链接库: 同样也要先修改pro文件
#Input下面加入: LIBS +=./debug/xx.lib
然后把xx.lib复制到使用程序的debug文件里 //上面的路径和你的lib文件将放哪里一定要一致
接着就把你的库程序的头文件复制到使用该库的程序里 就像一般的头文件一样使用
最后在程序中加入如下代码:
程序中:加入 #include"xx.h" //对于库的头文件
这样在本程序中就可以使用库里的类等等,,
值得注意的是:如果你的库是包含了很多个文件,记得把所有的头文件都包含到本使用的程序里,以及该库文件所使用到的其他的链接库也一样带着
2013/1/7
【附加】
经过好久的琢磨以及问老大们终于把动态链接库也搞定了,动态链接库如下
Qt动态链接库的创建与使用:
大致步骤和静态链接库一样,pro文件修改如下:
TEMPLATE = lib //应用程序是app
最关键的是链接库的导出, 头文件中加入如下导出定义
#ifndef XX_DLL
#define XX_DLL Q_DECL_EXPORT
#else
#define XX_DLL Q_DECL_IMPORT
#endif
然后在类名前加入:XX_DLL 例如:class XX_DLL XX
编译即可得到:lib 和 dll文件
使用的时候:头文件中不仅要加入使用的库的头文件 还要加入导出的预定义 #define XX_DLL
[ 动态与静态链接库的共同点是资源的共享 ]
动态链接库与静态链接库的区别:
动态链接库是在加入的程序中动态的加入链接库中的东西,即在运行时通过lib文件动态跳转指令实现对exe文件中加入链接库中的东西(lib文件的作用主要是跳转,没有lib文件别人无法使用你的动态链接库),优点:使exe文件小,可以调用很多链接库的东西,更换链接库灵活,缺点:丢失了dll或者没有dll无法运行
静态链接库是把链接库的资源加载到应用程序中,这样生成的exe文件比较臃肿相对于动态链接库而言,但不容易出错,例如dll丢失了的情况,缺点:更换链接库不灵活,得重新编译