軟件版本:QT5.12.0 + Qt Creator4.8.0
動態鏈接庫又叫"共享庫",即sharedLib。
Qt Creator中新建項目,選擇"Library"->"C++ 庫"
選擇"共享庫",選擇位置,輸入名稱:QtSharedLib
選擇MinGW構建,一直默認到完成即可!
最終生成如下文件:
完善導出類和導出函數:
編譯鏈接最終生成文件:
其中.a是導入庫,相當於Windows下的lib文件,.dll是共享庫文件,相當於Windows下的dll文件,.o是目標文件,相當於Windows下的obj文件。
共享庫的調用:
1)、使用QLibrary顯式鏈接,需要將dll與exe放在一起
新建Qt Console應用程序,代碼如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include <QCoreApplication>
#include <QLibrary> #include <QDebug> #include "QtStaticLib.h" int main( int argc, char *argv[]) { QCoreApplication a(argc, argv); // 聲明函數指針 typedef int (*Add)( int a, int b); typedef int (*Sub)( int a, int b); typedef int (*Mul)( int a, int b); typedef int (*Div)( int a, int b); // 顯式鏈接 QLibrary mylib( "QtSharedLib.dll" ); if (!mylib.load()) { // 加載 dll 失敗 qDebug() << "Load QtSharedLib.dll failed!" ; return - 1 ; } // 需要知道有哪些導出函數,可通過depends.exe查看 Add add = (Add)mylib.resolve( "add" ); Sub sub = (Sub)mylib.resolve( "subtraction" ); Mul mul = (Mul)mylib.resolve( "multiplication" ); Div div = (Div)mylib.resolve( "division" ); if (nullptr == add) { qDebug() << "Load function add failed!" ; return - 1 ; } if (nullptr == sub) { qDebug() << "Load function sub failed!" ; return - 1 ; } if (nullptr == mul) { qDebug() << "Load function mul failed!" ; return - 1 ; } if (nullptr == div) { qDebug() << "Load function div failed!" ; return - 1 ; } // 調用函數 qDebug() << add( 1 , 2 ); qDebug() << sub( 6 , 2 ); qDebug() << mul( 3 , 2 ); qDebug() << div( 8 , 2 ); return a.exec(); } |
2)、使用隱式鏈接
新建Qt Widget應用程序:
將QtSharedLib工程源碼目錄下的 QtSharedLib.h、QtSharedLib_global.h和QtSharedLib.a復制到該工程源碼目錄下,將 QtSharedLib.dll 文件復制到生成exe所在目錄中。
添加.a文件時,可在工程上右鍵,在彈出的菜單中選擇"添加庫…"
最后自動在pro文件中加入庫鏈接:
主函數調用:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# include
"Widget.h"
# include < QApplication > # include "QtSharedLib.h" int main( int argc, char * argv[]) { QApplication a(argc, argv); // Widget w; // w.show(); QtSharedLib sharedLib; sharedLib.showMessage(); return a.exec(); } |
輸出showMessage實現的打印信息:
Qt Creator中新建項目,選擇"Library"->"C++ 庫"
選擇"靜態鏈接庫",選擇位置,輸入名稱:QtStaticLib
選擇MinGW構建,一直默認到完成即可!
完善靜態庫代碼
編譯生成靜態庫文件:只有.a和.o文件
靜態庫的調用
這里使用隱式鏈接的方法:
繼續使用前面的Console應用程序,將靜態庫的.a文件以及.h文件拷貝到工程源碼目錄下,是"添加庫…"操作將庫配置寫入pro文件
輸出showMessage實現的打印信息: