一、如何在項目中引入.h、.lib和dll、以及.cpp
一直搞不清楚.h、.lib和dll在工程裏怎麼引入,稀裏糊塗的。這次使用sqlite做個試驗。
目錄如下:
..
include
lib
dll
工程\
注意:工程是最原是的MFC標準項目,沒有對環境變量做任何修改:
1、.h的引入
引入了.h才能使用類.
首先在工程中引入.h文件,然後在文件中:#include "sqlite3.h"。
編譯:
錯誤 1 fatal error C1083: 無法打開包括文件:“sqlite3.h”: No such file or directory d:\工作\vc\sqlite\sqlite\sqlite.h 12
原因分析:沒有設置項目屬性,工作怎麼知道到include目錄下找“sqlite.h”呢?工程只會到默認的目錄(d:\工作\vc\sqlite\sqlite\)下去找
找不到文件,編譯當然報錯了!
驗證:後在文件中:#include "sqlite3.h"註釋掉,編譯果然沒錯。
解決辦法1:把sqlite3.h拷到工程目錄下:d:\工作\vc\sqlite\sqlite\
解決辦法2:更常用的情況是,我們在其它地方建立一個Include目錄,然後設置項目環境配置,指向該目錄,如下:
配置項目屬性:c/c++ 常規 附加包含目錄 添加:..\..\Include
(爲什麼要用解決辦法2呢?想想有多個工程的情況,如果都引用同樣的.h文件,每個項目都在自己目錄下拷貝一份怎麼行?如果.h一旦修改,每個都得更替,多麻煩)
至此,你可以聲明.h文件中的類對象了,但是無法使用其中的方法。不信你試試,調用一個方法,例如,調用sqlite3對象的
int rc = sqlite3_open("MyDB", &m_db);
編譯報錯:
錯誤 1 error LNK2001: 無法解析的外部符號 _sqlite3_open SqliteDlg.obj
錯誤 2 fatal error LNK1120: 1 個無法解析的外部命令 D:\工作\VC\Sqlite\Debug\Sqlite.exe 1
注意,此時的錯誤是“Link”錯誤,也就是說,編譯已經完成了,沒有語法錯誤,然後鏈接lib庫的時候,報錯了。
此時,該lib登堂了。
2、.lib文件的引入
引入方法:
項目 屬性 鏈接器 輸入 附加依賴項 sqlite3.lib
編譯:
錯誤 1 fatal error LNK1104: 無法打開文件“sqlite3.lib” Sqlite
想想錯誤原因:工程怎麼知道sqlite3.lib在哪裏?
解決辦法1:把lib烤到工程目錄下:d:\工作\vc\sqlite\sqlite\
解決辦法2:把lib拷到目錄\lib目錄下,然後設置:
項目 屬性 鏈接器 常規 附加庫目錄 ..\..\lib
(注意:如果..\..\lib目錄下還有目錄,比如:
..\..\lib
..\..\lib\PDFLIB
要使用PDFLIB目錄下的lib文件,必須在本步同時添加目錄..\..\lib\PDFLIB
)
爲什麼要用解決辦法2呢?答案同另設include目錄一樣。
是不是這樣就完了?你F5運行試試看。。。
彈出錯誤:
沒有找到sqlite3.dll。。。。。。。!!!
爲什麼呢?想想lib和dll的作用分別是什麼。編譯的時候需要誰?運行的時候需要誰?
3、dll庫的引入
這次應該簡單了,把sqlite3.dll拷到工程目錄d:\工作\vc\sqlite\sqlite\ 下。
這樣就行了嗎?可以運行Debug編譯好的程序了嗎?不行,如果要運行Debug下的程序,需要將sqlite3.dll也拷貝到Debug目錄下。
4、.cpp文件的引入
假如一個項目中幾個工程,有一些通用模塊(定義成獨立的.h和.cpp文件),這些通用模塊可以放在一個公共目錄下(common目錄),大家都從這個目錄下引入。
好處是,大家用共同的文件,誰修改了其它人都能立刻看到,保持一致性。
使用方法: 配置項目屬性:c/c++ 常規 附加包含目錄 添加:..\common (注意,如果有子目錄,也要添加子目錄)
同時,要在項目中引入.h和.cpp文件。注意,引入後會在項目文件目錄中看到,但是文件還是在common目錄下的,本地沒有.
總結:
以上設置的目的,是將額外引入的資源,不管是.h,還是lib,還是dll,都儘量放到另外的一個公共目錄,而不是拷貝在本工程下面。因爲還可能有別的項目需要引用,放到一個公共目錄方便管理。
以下分別說明各種資源的做法:
.h 可以放到公共目錄,不需要拷到本地。可以不把.h文件導入到項目中,而直接#include ""
.lib 可以放到公共目錄,不需要拷貝到本地
.dll 需要拷貝到本地。如果使用Debug編譯出來的程序運行,需要拷貝到Debug下面
.cpp 可以放到公共目錄,不需要拷貝到本地 ,但需要在項目中引入
轉載地址:http://hi.baidu.com/darren_guo/item/c3273d2f7deb424d46996252