QT 动态库和静态库的实现和调用
一、简述
加强某一部分代码的保密性,将其打包成动态库或静态库;或者是调用其他开源的库文件。
二、效果
三、工程结构及创建注意事项
1、工程结构
2、工程创建注意事项
1、创建动态库(共享库)
2、创建静态库
3、调用库
注意:生成库只需“构建”,不需要“执行”;注意库文件的路径!
四、源文件
TestLib.pro文件
QT -= gui
TARGET = TestLib
TEMPLATE = lib
DEFINES += TESTLIB_LIBRARY
SOURCES += testlib.cpp
HEADERS += testlib.h\
testlib_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
testlib.h文件
#ifndef TESTLIB_H
#define TESTLIB_H
#include "testlib_global.h"
#include <QDebug>
class TESTLIBSHARED_EXPORT TestLib
{
public:
TestLib();
void MyLib();//自己写的库函数
};
#endif // TESTLIB_H
testlib_global.h文件
#ifndef TESTLIB_GLOBAL_H
#define TESTLIB_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(TESTLIB_LIBRARY)
# define TESTLIBSHARED_EXPORT Q_DECL_EXPORT
#else
# define TESTLIBSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // TESTLIB_GLOBAL_H
testlib.cpp文件
#include "testlib.h"
TestLib::TestLib()
{
}
void TestLib::MyLib()
{
qDebug()<<"This is a Test!";
}
TestStaticLib.pro文件
QT -= gui
TARGET = TestStaticLib
TEMPLATE = lib
CONFIG += staticlib
SOURCES += teststaticlib.cpp
HEADERS += teststaticlib.h
unix {
target.path = /usr/lib
INSTALLS += target
}
teststaticlib.h文件
#ifndef TESTSTATICLIB_H
#define TESTSTATICLIB_H
#include <QDebug>
class TestStaticLib
{
public:
TestStaticLib();
void MyStaticLib();//自己写的库函数
};
#endif // TESTSTATICLIB_H
teststaticlib.cpp文件
#include "teststaticlib.h"
TestStaticLib::TestStaticLib()
{
}
void TestStaticLib::MyStaticLib()
{
qDebug()<<"This is a MyStaticLib!";
}
UseMyLib.pro文件
SOURCES += \
main.cpp
#根据实际路径添加 库文件所在文件夹 生成的库文件libTestLib.a(只写TestLib)
LIBS += -LD:\QTProject\build-TestLib-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug -lTestLib \
-LD:\QTProject\build-TestStaticLib-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug -lTestStaticLib
main.cpp文件
#include <QCoreApplication>
#include "../TestLib/testlib.h"
#include "../TestStaticLib/teststaticlib.h"
int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
//动态库调用
TestLib lib;
lib.MyLib();
//静态库调用
TestStaticLib staLib;
staLib.MyStaticLib();
return app.exec();
}