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