Qt构建动态链接库加快编译速度
其实Qt下建立一个动态链接库是相对容易的,因为Qt Creator替我们准备好了动态链接库的项目模板。今天突然发现有个小朋友没有做过Qt的动态链接库,所以撰文记录希望可以帮到更多的同学。
点击确认后选择下一步,在向导中选择共享库,选择对应的Qt模块
我们可以看到,IDE帮我们创建好了刚刚输入的类名源文件。仔细观察种店其实是FOOAPI_EXPORT
的宏定义。
注意:后面新建的类,函数也需要增加FOOAPI_EXPORT
这个宏定义
#ifndef FOOAPI_H
#define FOOAPI_H
#include "FooAPI_global.h"
class FOOAPI_EXPORT FooAPI
{
public:
FooAPI();
};
#endif // FOOAPI_H
我们跟踪这个宏定义可以发现最终其实是两个编译器的指令关键字,从字面意思就能看出是操作动态链接库符号导入/导出的意思。
#ifndef FOOAPI_GLOBAL_H
#define FOOAPI_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(FOOAPI_LIBRARY)
# define FOOAPI_EXPORT Q_DECL_EXPORT
#else
# define FOOAPI_EXPORT Q_DECL_IMPORT
#endif
#endif // FOOAPI_GLOBAL_H
# define Q_DECL_EXPORT __declspec(dllexport)
# define Q_DECL_IMPORT __declspec(dllimport)
我们随便写一个输出调试信息和求和的接口,然后在一个可执行文件中导入刚刚制作的动态链接库。
在调用对应动态链接库的时候,需要增加对应的qmake配置
INCLUDEPATH += ../dynamic_libraries/FooAPI
LIBS += -L$$DESTDIR -lFooAPI
不出意外的话效果如下,如果出意外也很正常,多搜索多尝试。实在不行请联系小虎。
#include "FooAPI.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FooAPI foo;
foo.foo();
qDebug() << "3 + 5 = " << foo.sum(3, 5);
return a.exec();
}
感谢扫码支持