在 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.在標頭檔案裡加上個方法,並在自動生成的類裡也加上個...