关于共享库的创建网上有很多教程,当然,我还是喜欢看官方的文档,可参考:How to create a library with Qt and use it in an
application.
什么是共享库呢?其实就是我们常说的动态链接库。
动态链接库和静态链接库的区别又是什么?
区别一:
动态链接就是把调用函数所在的DLL和调用函数在文件中的位置等信息链接进主程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。
静态链接库是把LIB文件中用到的函数代码直接链接进主程序,程序运行时不再需要其它库文件。
动态链接库和静态链接库都是共享代码的方式,如果采用静态链接库,LIB中的指令全部被直接包含在最终生成的 EXE
文件中。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”引用和卸载这个与EXE独立的DLL文件。
区别二:
动态链接库中可以再包含其它动态或静态链接库。
静态链接库中不能再包含其它动态或者静态链接库。
使用及发布:
静态链接库,虽然效率高点,且发布简单,但可执行程序较大。。。
动态链接库:相关联的库以DLL的形式引用,不被包含进可执行程序,发布不方便(需要将每一个DLL都添加到安装包中),但可执行程序较小。。。而且共享库的一个好处是可以动态加载,也就是说,如果涉及到软件升级,那么简单的替换掉相应的DLL就行,不需要重新安装整个程序。
下面我们来说说Qt中如何创建共享库并应用到程序当中。
1、文件->新建文件或项目
2、选择库->C++库
3、选择共享库(Shared library)
4、然后傻瓜式的下一步
5、选择所需要的模块(这里我选择了core、gui、widgets,大家根据各自的情况来选依赖的模块)
SharedLibrary.pro
QT += widgets
TARGET = SharedLibrary
TEMPLATE = lib
DEFINES += SHAREDLIBRARY_LIBRARY
HEADERS += sharedlibrary.h\
sharedlibrary_global.h
SOURCES += sharedlibrary.cpp
TEMPL