日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT中动态库和静态库使用

發布時間:2023/12/18 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中动态库和静态库使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。