如何在項目中引入.h、.lib和dll、以及.cpp

一、如何在項目中引入.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

發佈了1 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章