1.创建C++库
1.1点击New Project
1.2选择库模板
选择“Library”中的”C++库”,再点击“Choose”。
1.3选择共享库
给共享库取个名称,并指定生成文件存放路径。再点击“下一步”。
1.4选择编译器
再点击“下一步”。
1.5选择所需要的模块
默认选择QtCore(QtCore模块提供核心的非图形用户接口功能,所有其他Qt模块都依赖于这个模块,如果您使用qmake来构建您的项目,则默认将QtCore包含在内)
相信,大部分人封装动态链接库的时候是不需要将界面封装的,只需要封装核心代码,故我们在此不选择QtGui。但如果需要将图形界面一起封装,就需要选择该项。
再点击“下一步”。
1.6项目管理
点击”完成“。
1.7点击项目,勾掉Shadow build,使.dll不生成在debug目录中,生成在我们自己创建的目录下面,方便查找和使用
1.8 在.pro文件中,添加如下代码
DESTDIR =..MyDebug
使生成的.dll文件放在该目录下,自动创建该目录。
1.9 点击运行,即可生成。(此弹框不用管它,代表编译成功,已生成文件)
注意:
当创建完C++库的工程后, 可以看到QT自动生成了一个名为serial_global.h的文件。其中serial是我工程的名字。
#ifndef SERIAL_GLOBAL_H #define SERIAL_GLOBAL_H #include <QtCore/qglobal.h> #if defined(SERIAL_LIBRARY) # define SERIALSHARED_EXPORT Q_DECL_EXPORT #else # define SERIALSHARED_EXPORT Q_DECL_IMPORT #endif #endif // SERIAL_GLOBAL_H
其中第6和第7行的意思如果定义了SERIAL_LIBRARY,SERIALSHARED_EXPORT定义为Q_DECL_EXPORT,否则定义为Q_DECL_IMPORT。这就是把对象导出的语句。
SERIAL_LIBRARY在.pro中定义
在对应的serial.h中可以看到
在Serial前面就跟着SERIALSHARED_EXPORT。就相当于把Serial导出。所谓的导出,就是将其编译成一个dll文件后,其他的文件可以使用这个导出类。
所以如果自己定义的函数不在类里面,就要单独的导出。
也可以用extern "C" { }把里面的函数全部包含进去。
2.调用C++库
2.1 手动添加
2.1.1在文件目录创建include目录和lib目录
把对应的库放到lib目录中,把对应的头文件放在include目录中。
2.1.2 在.pro中添加对应信息
LIBS += -L$$PWD/lib -lSerial INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include
2.1.3 在main.cpp中添加头文件
这样就可以直接调用共享库中的对象或者函数了。
2.2 自动添加库
直接点击test,然后单间右键。里面有一个“添加库”。