1.共享库介绍
1. 1静态函数库
1.1.1 库名称
window下格式为: *.a
linux下格式为: *.a
1.1.2 特点
链接时被整合入目标代码。
1.1.3 优点
软件运行不再依赖外部库的支持,可以独立运行。
1.1.4 缺点
编译后生成的exe包含了整个库,所以体积比较大,而且由于是整个整合入代码,所以如果有改动需要重新编译软件。
1.2 动态函数库
1.2.1 库名称
window下格式为: *.dll
linux下格式为: *.so
1.2.2 特点
程序运行时再去库里寻找函数。
1.2.3 优点
生成的exe不受共享库的影响,改变库函数的时候不需要重新编译软件,只需要替换dll即可,方便库的更新升级。
1.2.4 缺点
软件需要依赖库,安装目录会比较冗余,可能会出现奇怪的环境问题或者版本问题 。
2.QT生成共享库
2.1生成静态链接库
点开.pro文件
关键配置:CONFIG += staticlib 表示只需要生成静态库
TEMPLATE 生成目标是共享库
生成.a静态库 (静态库实际上就是.o文件的集合)
2.2生成动态链接库
点开.pro文件
关键配置: TEMPLATE 生成目标是共享库
构建工程。
生成动态库.dll 可以看到此处也有.a 不过很明显这个.a不是上面那种静态库(太小了),实际上它是这个.dll的索引文件,在VS下应该是一个.lib的文件,它只包含了库中的索引,比如类或者函数,而实际的实现则在dll中。
3.QT使用共享库
3.1 未引用状态
此时为没有引用任何共享库的状态,生成exe
3.1引用动态链接库
注意这个.a不是静态链接库,而是动态链接库的索引
转到pro可见
(关于pro参数问题后续单独出再出文章分析)
可见已经引用了libShared
代码里也引用一下。重新构建
可见没有明显变大
3.2 引用静态链接库
转到pro可见
生成的配置信息其实是一样,下面那几行是可以删掉的。
重新构建:
可见软件是明显变大了。