2013-05-19 60 views
5

我在驅動程序庫中看到這三個文件。這三個文件如何相關,文件的編譯順序和每個文件的內容是什麼?除此之外,我還看到.a文件與.lib相同?頭文件(.h),庫文件(.lib)和DLL(.dll)文件如何相關

+0

您的代碼包含頭文件.h和源文件(.c/.cpp)。頭文件是每次將#include包含在源文件中時複製/粘貼的代碼片斷。編譯代碼時,編譯器將源文件輸出爲目標文件(.o或.obj)。 .lib文件只是一個包含所有對象文件的存檔。該DLL庫是一個編譯代碼,它包含一系列可以在代碼中重用的導出函數。 .exe是編譯代碼,在啓動時調用main()函數。 –

回答

4

.lib和.dll文件都是Windows庫(.o或.obj文件)的可執行文件的容器,前者(.lib)包含東西(函數,定義等),您必須靜態鏈接到項目的可執行文件。後者(.dll)要麼已經存在於系統中,要麼將其放入系統中,並且動態鏈接到項目的可執行文件。

對於Unix/Linux系統,文件擴展名分別爲.a和.so(即.a而不是.lib,而.so而不是.dll)。

在所有情況下,編譯項目時,您必須#include一個或多個由所使用(他們被稱爲頭文件)庫提供給您的.h文件的,因爲這是可執行文件裏面的東西圖書館的定義。

編輯

靜態鏈接庫的主要優點是,它是獨立的(沒有外部的依賴關係),但它會增加你自己的可執行文件的大小。主要缺點是未來的版本必須重新編譯和重新分發。

對於動態鏈接庫,我們重新分發更新後的庫可執行文件。主要缺點是我們的程序依賴於客戶系統上已安裝的庫。

+0

應該指出的是,還有一些被稱爲「導入庫」的東西http://stackoverflow.com/questions/3573475/how-does-the-import-library-work-details –