標籤:
我們在編寫程式時,,不可避免的會使用第三方的庫檔案,很少使用源檔案(.cpp),大部分是使用對類進行聲明的標頭檔和封裝了類的連結庫(靜態lib或動態dll),比如我們寫程式用的iostream這個庫,當然這個是已經設定好的官方的庫,讓我們使用某個第三方的庫時,需要自己來進行配置。
C++的庫會把函數、類的聲明放在*.h中,實現放在*.cpp或*.cc中。編譯之後,*.cpp,*.cc,*.c會被打包成一個.lib檔案,這樣可以保護原始碼。
所以,要使用一個庫,除了要include他的標頭檔以外,還要在連結過程中把lib加進去。
有兩種方法解決這個問題。
主要有兩種辦法:
第一種:我們可以將我們所需要的庫檔案(.lib),已經該標頭檔(.h)拷貝到我們程式的目錄下,其實只要拷貝到程式目錄下即可,因為編譯時間,編譯器會自動會在項目所在的檔案裡逐個搜素,若我們使用的庫檔案存在動態連結檔案時,一般我們把它拷貝到我們程式可執行檔所存在的檔案中,這樣我們就可以在我們的程式中使用。
但是有個缺點,假若我們需要使用的庫檔案太多,這樣拷貝會比較麻煩,效率比較低。我們可以使用第二種方法。
第二種:我們可以在我們的程式中載入我們所需要的庫檔案,從而不需要拷貝到自己程式的目錄下。我們以一個例子來說明,我現在要在程式中引用sqlite資料庫的API函數
舉例:
建立項目:zrl(隨便起的),這裡僅僅是示範,所以我們建立一個空工程,運行一下(產生可執行檔)
1 添加檔案引用的lib靜態庫路徑:工程---屬性---配置屬性---連結器---常規---附加庫目錄:加上lib檔案存放目錄。(注意:這個檔案的存放目錄指的是你的庫檔案所放的最後一級的目錄,一定不要帶上你的檔案名稱,這裡僅僅指的是存放”庫檔案所在檔案目錄”,下同)
2 然後添加工程引用的lib檔案名稱:工程---屬性---配置屬性---連結器---輸入---附加依賴項:加上lib檔案名稱,這個步驟等同於在程式中添加 #pragma comment(lib, “xxx.lib”)
3添加工程的標頭檔目錄:工程---屬性---配置屬性---c/c++---常規---附加元件封裝含目錄:加上標頭檔存放目錄。 此例子中:
4添加工程引用的dll動態庫:把引用的dll放到工程的可執行檔所在的目錄下。
或者我們也可以不添加附加庫目錄,附加元件封裝含目錄這兩個,我們也可以在 工程---屬性---配置屬性---VC++屬性—包含目錄 添加 標頭檔所在的檔案目錄。
在工程---屬性---配置屬性---VC++屬性—庫目錄 添加庫目錄所在的檔案目錄。但此時仍要設定附加依賴項(和上面一樣)。
同時總結一下在引用第三方庫時所出現問題:
1若附加連結庫中設定錯誤(拼字錯誤等),或者既沒有添加也沒有使用#pragmacomment(lib,"xxx.lib") 來設定
這個過程出錯會出現link error,大概是“未定義的函數XXX”。
2庫目錄錯誤:就是尋找.lib檔案的目錄。如果設定錯誤,會link error,提示"找不到XXX.lib"。
這樣設定完後,我們就可以是使用我們所添加的庫的函數了。
VS中使用第三方庫原理(配置sqlite資料庫)