Qt之建立並使用共享庫

2021-08-19 20:26:38 字數 2807 閱讀 6384

在 windows 中,有動態鏈結庫(dll - dynamic link library);在 linux 中,有共享庫(shared library),它們是相同的!

由於平台和編譯器的差異,輸出的庫檔案也不同:

要建立乙個共享庫,需要執行以下幾個步驟:

檔案 -> 新建檔案或專案,選擇:library -> c++ 庫:

- 選擇「共享庫」,然後輸入「名稱」(這裡以 sharedlib 為例),並選擇「建立路徑」:

注意: 「型別」下拉列表中有三個選項,分別是:共享庫、靜態鏈結庫、qt plugin(qt 外掛程式)。

在專案建立完成之後,qt creator 會幫我們生成一系列相關檔案,目錄結構如下:

檢視 .pro,並對其稍作修改:

target = sharedlib

# 新增部分

config += debug_and_release

config(debug, debug|release)

template = lib

defines += sharedlib_library

這裡,同時出現了乙個非常重要的檔案 - _global.h,這是 qt creator 幫我們建立的,內容如下:

#ifndef sharedlib_global_h

#define sharedlib_global_h

#include

#if defined(sharedlib_library)

# define sharedlibshared_export q_decl_export

#else

# define sharedlibshared_export q_decl_import

#endif

#endif // sharedlib_global_h

符號 - 函式、變數或類 - 包含在供客戶端(例如:應用程式或其他庫)使用的共享庫中,必須以一種特殊的方式標記。這些符號被稱為公共符號,它們被匯出或公開可見。

在編譯共享庫時,必須將其標記為匯出。為了在客戶端使用共享庫,一些平台可能需要乙個特殊的匯入宣告。

為此,qt 提供了兩個特殊的巨集:

所以,要確保正確的巨集能夠被呼叫(無論是編譯共享庫本身,還是在客戶端使用共享庫),通常通過新增乙個特殊的標頭檔案(_global.h)來解決,這就是 sharedlib_global.h 存在的原因。

可以看到,生成的庫中只有乙個簡單的類定義。為了便於使用,為其新增一些簡單的函式:

sharedlib.h 內容如下:

#ifndef sharedlib_h

#define sharedlib_h

#include "sharedlib_global.h"

sharedlibshared_export int subtract(int x, int y);

class

sharedlibshared_export

sharedlib

;#endif // sharedlib_h

sharedlib.cpp 內容如下:

#include "sharedlib.h"

int subtract(int x, int y)

sharedlib::sharedlib()

int sharedlib::add(int x, int y)

構建(不執行)專案,會生成相應的 .lib 和 .dll 檔案。

這時,.pro 中會自動新增以下**:

win32:config(release, debug|release): libs +=

-l$$pwd/3rdparty/sharedlib/lib/

-lsharedlib

else:win32:config(debug, debug|release): libs +=

-l$$pwd/3rdparty/sharedlib/lib/

-lsharedlibd

includepath += $$pwd/3rdparty/sharedlib/include

dependpath += $$pwd/3rdparty/sharedlib/include

開始測試,main.cpp 內容如下:

#include

#include "sharedlib.h"

int main(int argc, char *argv)

ok,執行程式,效果如上所示。

注意: 在執行程式時,需要將對應的 dll(debug 為 sharedlibd.dll,release 為 sharedlib.dll) 拷貝到和可執行程式同一級目錄下,否則會出錯。

qt使用第三方庫

Qt之建立並使用靜態鏈結庫

繼上一節 qt之建立並使用共享庫 之後,關於動態鏈結庫和靜態鏈結庫已經有了更深入的認識,所以這裡不再贅述,下來我們一起看看如何建立與使用靜態鏈結庫。建立步驟與共享庫一致,唯一的區別是庫型別選擇 靜態鏈結庫。qt core gui widgets target staticlibrary templa...

Linux 建立共享物件,共享庫並安裝使用共享庫

linux的共享物件與window下的動態鏈結檔案是乙個等價的概念,但是不同的作業系統對共享物件的儲存方式不同。而linux 的共享庫也是共享物件的形式,是將多個原始檔編譯為乙個共享物件的方式,這個共享物件就是共享庫,現在共享物件與共享庫的概念已經不再著重區分。假設現有原始檔 a.c 將其編譯為共享...

QT Creator使用共享庫(一)建立共享庫

最近使用qt的移動裝置要呼叫個加密的.so,在前人 上折騰了n久也沒出來,終於自己照著幫助一步步作了一下,在此記下一筆。使用的工具 qt creator 測試環境 win 7,qt平台的外設 首先我們寫個共享的庫檔案 1.建立c 庫,選擇共享庫 2.在標頭檔案裡加上個方法,並在自動生成的類裡也加上個...