dll、Lib、obj、.h檔案的區別與作用

鴨脖發表於2012-12-17

obj:

        目標檔案,一般是程式編譯後的二進位制檔案,通過連結器和資原始檔連結後就成為exe檔案(連結器將使用這些檔案生成EXE檔案)。

    obj只給出了程式的相對地址,而EXE是絕對地址。  

        CPP對應的二進位制程式碼格式,是未經重定位的!

  lib:是若干個obj的集合,本質與obj相同!  

       lib有靜態lib和動態lib之分。
   靜態lib將匯出宣告和實現都放在lib中。編譯後所有程式碼都嵌入到宿主程式.

   動態lib相當於一個h檔案,是對實現部分(.dll檔案)的匯出部分的宣告。編譯後只是將匯出宣告部分編譯到宿主程式中,執行時候需要相          應的dll檔案支援.

       lib檔案是不對外公開的,不能檢視一個編譯過後的檔案

       靜態庫(lib)的呼叫需要標頭檔案(#include ".h")和新增庫檔案(.lib),新增庫檔案可以利用開發環境新增,也可以程式碼新增:#pragma                comment(lib,"lib//tlib.lib"

       程式設計中,新增lib檔案的常用辦法有二個: 
   1、把*.lib放在VC的Lib目錄中 

   2、修改project setting的Link->Input中的Addtional library path,加入你的目錄
  dll:是可實際執行的二進位制程式碼,有定位程式碼的!  

       DLL 是一個包含可由多個程式同時使用的程式碼和資料的庫,DLL不是可執行檔案。動態連結提供了一種方法,使程式可以呼叫不屬於其可執        行程式碼的函式。函式的可執行程式碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、連結並與使用它們的程式分開儲存的函式。DLL          還有助於共享資料和資源。多個應用程式可同時訪問記憶體中單個DLL 副本的內容。

       DLL內的函式分為兩種:(1)DLL匯出函式,可供應用程式呼叫;

                                        (2)DLL內部函式,只能在DLL程式使用,應用程式無法呼叫它們

       要匯出 DLL 函式,您可以嚮匯出的 DLL 函式中新增函式關鍵字,也可以建立模組定義檔案 (.def) 以列出匯出的 DLL 函式。

  h:  是標頭檔案,也可算是原始碼,因為當CPP中用#include時,會把包含的檔案的內容在CPP中擴充套件開!

       h檔案是用來編寫函式(類,變數型別)原型宣告的,通常dll、lib和obj的使用需要有h檔案的配合,以獲得二進位制程式碼的原型宣告!


轉自http://blog.csdn.net/beryl_song/article/details/5556319

相關文章