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