1、Qt新建库工程DemoDll
其中DemoDll头文件:
#ifndef DEMODLL_H
#define DEMODLL_H
#include "demodll_global.h"
/* 下面这段class没啥用,可以直接删掉
class DEMODLLSHARED_EXPORT DemoDll
{
public:
DemoDll();
}; */
extern "C" DEMODLLSHARED_EXPORT int Add(int, int);
#endif // DEMODLL_H
DemoDll源文件:
#include "demodll.h"
/* 构造函数也没啥用,直接删掉
DemoDll::DemoDll()
{
} */
int Add(int a, int b)
{
return a+b;
}
编译生成DemoDll.dll;Linux编译后生成的是libDemoDll.so
2、调用编译生成的库头文件定义调用接口#include ...#include ...
...
...
//定义接口typedef int ( *libAdd )(int,int);源文件调用关键代码(Window平台测试)
#ifdef Q_OS_WINlibDll.setFileName("DemoDll.dll"); // libDll为QLibrary类型#endif#ifdef Q_OS_LINUXlibDll.setFileName("libDemoDll.so");#endif#ifdef Q_OS_MAClibDll.setFileName("libDemoDll.dylib");#endifif(libDll.load()){libAdd Add12=(libAdd)libDll.resolve("Add"); //resolve后面的参数务必和库定义的方法名一致if(Add12){int ret = Add12(2, 3); //调用DLL Add函数}}