动态库生成:
首先:
1、【新建工程】按图选择【库】新建【c++库】
然后填写你想要生成的库的名字。
完成后会出现两个头文件和一个资源文件。
我们看下global.h文件
#ifndef T_DLLLOAD_GLOBAL_H
#define T_DLLLOAD_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(T_DLLLOAD_LIBRARY)
# define T_DLLLOADSHARED_EXPORT Q_DECL_EXPORT
#else
# define T_DLLLOADSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // T_DLLLOAD_GLOBAL_H
【
Q_DECL_EXPORT
】是说你将要导出给别人使用的api,【
Q_DECL_IMPORT
】就不清楚了。
那【T_DLLLOAD_LIBRARY】是在哪里定义的呢,在.pro 文件。我们看下.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2014-06-14T14:12:25
#
#-------------------------------------------------
QT +=widgets
TARGET = t_dllLoad
TEMPLATE = lib
DESTDIR = $$_PRO_FILE_PWD_/../mlib
DEFINES += T_DLLLOAD_LIBRARY
SOURCES += printhellodll.cpp
HEADERS += printhellodll.h\
t_dllload_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
看到【
DEFINES += T_DLLLOAD_LIBRARY
】没,恩,就是这货,DEFINES就相当于我们在头文件【#defineT_DLLLOAD_LIBRARY】,不过DEFINE是全局定义,就是说整个工程会识别到。
【TEMPLATE】呢,就是设置你这个工程是拿来干啥的,
【TEMPLATE = app】是普通的可执行程序项目,会自动需要main()函数入口执行。
【TEMPLATE = lib】是库生成说明,构建以后会生成动态库(额,如果我要生成静态库呢?)
【TEMPLATE =subdirs】 这个是生成一个总工程用的,很多个子工程来一起编译,方便管理,你如果去看qt的例子,很多都是用这个统一管理的。用法是例如下边这样
TEMPLATE = subdirs
SUBDIRS = \
dir\
hahah11 \
#如果子工程pro文件和上边不一样还可以这样设置
dirrrr.file = haha/haha.pro
[ DESTDIR = $$_PRO_FILE_PWD_/../mlib ]这货设设置生成路径的,【_PRO_FILE_PWD_】是当前pro文件的路径,你按f2看下就知道了。【$$】是取值。
好叻,差不多了。记住你要导出的每一个函数,它的声明都要加上【T_DLLLOADSHARED_EXPORT】或者【Q_DECL_EXPORT】,类也是要加的,不过它的成员就不用了。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
动态库的导入: