Qt建立和使用動態鏈結庫

2021-06-12 16:43:34 字數 3659 閱讀 3425

一、建立共享庫

1、新其他建專案,選擇

c++庫

2、選擇共享庫,並取專案名稱,單擊下一步。這裡取名位mylib

3、按預設配置單擊下一步至模組選項,選擇所需支援的模組。這裡勾選qtcore

和qtgui。

4、直接下一步至完成。現在乙個共享庫的工程就新建好了。

5、右擊專案新增新檔案,選擇qt

設計師介面,以便支援視覺化介面設計。

6、進入視覺化介面設計,修改objectname

為mylib

7、修改mylib.h

檔案,**如下:

#ifndef mylib_h

#define mylib_h

#include "mylib_global.h"

#include namespace ui

class mylibshared_export mylib :public qdialog

;#endif // mylib_h

8、修改mylib.cpp

檔案,**如下:

#include "mylib.h"

#include "ui_mylib.h"

mylib::mylib(qwidget *parent):

qdialog(parent),

ui(new ui::mylib)

9、右鍵單擊專案,選擇構建專案"mylib"

。如果沒有錯誤,構建成功後會在

debug

資料夾下出現這三個檔案。

mylib.dll即為後面要使用到的共享庫,

libmylib.a

是linux

下使用的庫。

至此,已生成了要使用的共享庫。

二、共享庫的使用

現在需要新建乙個工程來呼叫我們剛才生成的共享庫。這裡我建立了乙個名為libtest

的dialog

工程。

1、修改工程檔案libtest.pro

,在檔案尾新增如下**:

[cpp]view plain

copy

print

?

includepath += ../  

libs += ../debug/lib.dll  

includepath += ../ 

libs += ../debug/lib.dll

includepath 這一行就是為了讓我們的

libtest

專案可以找到

mylib.h

和mylib_global.h

這兩個檔案,你需要把這裡的路徑替換成符合你的工程的路徑。

libs 這一行則需要告訴編譯器(注意,這裡是編譯器!)到**去找到這個 dll

檔案。

這裡,我的路徑為:

[cpp]view plain

copy

print

?

includepath += i:\qt\myprojects\mylib 

libs += i:\qt\myprojects\mylib\debug\mylib.dll  

includepath += i:\qt\myprojects\mylib

libs += i:\qt\myprojects\mylib\debug\mylib.dll

2、在dialog

中新增乙個

button

,單擊button

時呼叫共享庫。修改

dialog.cpp

檔案,**如下:

#include "dialog.h"

#include "ui_dialog.h"

#include "mylib.h"

dialog::dialog(qwidget *parent) :

qdialog(parent),

ui(new ui::dialog)

dialog::~dialog()

void dialog::on_pushbutton_clicked()

3、此時執行一下,會是什麼效果呢?什麼都沒有!提示

[cpp]view plain

copy

print

?

i:\qt\myprojects\libtest\debug\libtest.exe 啟動中... 

i:\qt\myprojects\libtest\debug\libtest.exe 退出, **: -1073741515 

i:\qt\myprojects\libtest\debug\libtest.exe 啟動中...

i:\qt\myprojects\libtest\debug\libtest.exe 退出, **: -1073741515

找到libtest

工程目錄下的

libtest.exe

,雙擊執行,彈出

沒有找到mylib.dll?不是使用 libs

指定了嗎?請注意,我們強調了,這個指定是編譯期的。

dll是動態鏈結庫,也就是說,在

exe執行的時候需要找到這個庫。執行時查詢的順序是:當前路徑

->

系統路徑

(通常是

system32)

。所以,要把我們先前生成的這個mylib.dll複製到

exe所在目錄,然後直接雙擊一下這個

exe檔案。程式執行如下

單擊mylib test按鈕,共享庫

mylib

的dialog

也彈出來啦

~~~

到這裡,共享庫的使用也成功了。

三、更新dll

也許有人要問了,共享庫的建立和使用都這麼麻煩,用它有什麼好處呢。

共享庫的乙個好處是可以動態載入,也就是說,如果你需要公升級程式,那麼就要簡單的替換掉這個 dll

就好了,不需要要求使用者重新安裝全部檔案。當然,這些

dll也是有缺點的:動態載入的東西肯定會比靜態編譯的東西效率低一些。不過在現在的硬體環境下,這點效能損失已經可以忽略不計了。

好,那麼我們現在來體驗一下如何更新dll

來達到公升級程式的目的。

1、修改mylib.cpp

,在共享庫的

dialog

中新增乙個

button。

2、右鍵單擊專案mylib

,選擇重新構建專案

"mylib"

3、將libtest

專案目錄下的

mylib.dll

替換新的

mylib.dll。

4、執行libtest.exe

這時單擊mylib test按鈕,效果如何呢?

至此,我們在沒有修改程式的情況下,通過替換dll達到了改變程式執行效果的目的。也就是說我們可以通過更新dll檔案來完成對程式的公升級了。

原文出處:

建立和使用動態鏈結庫

在本演練中,您將建立乙個動態鏈結庫 dll 其中包含可供其他應用程式使用的有用例程。使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現這些例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練使用本機 c 有關使用本機 c 建立靜態庫的演練,請參見 演...

建立和使用動態鏈結庫 C

我們將建立的第一種型別的庫是動態鏈結庫 dll 使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現同一例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練涵蓋以下內容 本主題假定您具備 c 語言的基礎知識。從 檔案 選單中,選擇 新建 然後選擇 專案...

動態鏈結庫DLL建立和使用

到目前為止剛剛開始接觸dll dynamic link library 一邊看書,一邊建立了乙個dll檔案,然後進行了dll檔案的使用,具體操作以及 如下 1 createdll工程的建立,工程型別為win32下的dll型別 生成的程式入口函式為 bool apientry dllmain hmod...