1. 程式人生 > >如何在QT中建立並引用庫

如何在QT中建立並引用庫

基本操作流程:

在QT中新建一個庫,包含(.pro & .h & _global.h & .cpp )–>

編寫程式和庫函式,執行 qmake(生成Makefil檔案) 和build後,在和專案資料夾 [A] 並列的build…資料夾 [B] 中會生成.o(目標/執行檔案)和.so(動態連結庫)檔案 -->

引用該庫時在專案的.pro中新增兩行,注意檢查是否與實際相符:

LIBS += *B資料夾的路徑*
INCLUDEPATH += *A資料夾的路徑*

注:無需再在該專案的build…資料夾中加入庫檔案

.pro檔案的書寫

LIBS += //指定連結到專案中的庫列表

  • 分為絕對路徑和相對路徑(相對於當前專案所在資料夾來說,加$$pwd字首)
  • 路徑中有<空格>的話需要新增""
  • -L指定庫的目錄,而-l指定庫的名字(如果是在Linux下,則去掉lib和字尾名,windows下去掉字尾名即可),靜態庫、動態庫都是一樣的。

INCLUDEPATH +=  //指定編譯專案時應該被搜尋的#include目錄

  • 引用的是第三方庫時新增
  • 路徑中用"+<換行>"分開,注意最後一行沒有\符號

QT在編譯連結第三方庫時配置include目錄
第一方是電腦自帶的(比如圖片\視訊\郵件等軟體庫),
第二方是我後來裝到電腦上的(QQ\微信\暴風等軟體庫),
第三方是我從github上下的開原始碼?
參考:

https://blog.csdn.net/stpeace/article/details/51870406
所以說我的slam程式中openCV\pcl等都算是第二方庫,可以不INCLUDEPATH
Mr.肖:安裝了的谷歌瀏覽器算二方的話,其上外掛就算三方

動態和靜態連結庫

本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。
庫有兩種:靜態庫和動態庫,所謂靜態、動態是指連結。

靜態庫(.a、.lib):
在程式編譯時會被連線到目的碼中,程式執行時將不再需要該靜態庫(在連結階段,會將彙編生成的目標檔案.o與引用到的庫一起連結打包到可執行檔案中,因此對應的連結方式稱為靜態連結),靜態庫浪費資源且不方便之後的更新改動

動態庫(.so、.dll):
在程式編譯時並不會被連線到目的碼中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在.不同的應用程式如果呼叫相同的庫,那麼在記憶體裡只需要有一份該共享庫的例項,規避了空間浪費問題