生活随笔
收集整理的這篇文章主要介紹了
QT中动态库和静态库使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
軟件版本: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應用程序,代碼如下:
C++ Code?
| 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文件中加入庫鏈接:
主函數調用:
?C++ Code?
| 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實現的打印信息:
總結
以上是生活随笔為你收集整理的QT中动态库和静态库使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。