QT 动态库和静态库的实现和调用
一、简述
加强某一部分代码的保密性,将其打包成动态库或静态库;或者是调用其他开源的库文件。
二、效果
三、工程结构及创建注意事项
1、工程结构
2、工程创建注意事项
1、创建动态库(共享库)
2、创建静态库
扫描二维码关注公众号,回复:
1443015 查看本文章
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(); }