C/C++::淺談.obj .exe .dll .lib關係&& .a .so .o關係

淺談.lib .dll .obj 關係&& .a .so .o關係 


一、.obj .exe .dll .lib

(1).obj

  • 目標文件,相當於源代碼對應的二進制文件。
  • obj文件就是用.c .cpp .h文件經過編譯器編譯之後生成的目標文件。

(2).exe

  • 將程序運行所需要的全部.obj文件連接起來,即形成.exe文件。
  • 也就是windows下的可執行文件。
  • obj只給出了程序的相對地址,而EXE是絕對地址

(3).dll

  •  .dll是可提供給多個程序同時使用的可執行代碼和數據(資源 )的庫
  • 可簡單理解爲封裝好的.cpp,裏面裝的是函數的具體實現
  • .dll是動態編譯出來的程序運行時所需要的庫,沒有.dll文件,動態編譯的程序就不能運行

(4).lib

  • .lib是編譯程序時所需的,非運行時所需
  • .lib分爲靜態和動態
  • 靜態.lib包括了方法及其具體實現。
  • 動態.lib只有方法的聲明,相當於一個h文件,是對實現部分(.dll文件)的導出部分的聲明。
  • 利用靜態lib編譯出來的程序,運行時不需要.dll文件的支持。
  • 利用動態lib編譯出來的程序,運行時需要.dll文件提供方法的具體實現
  • 實際上:.lib文件可看做是若干個.obj文件的集合

(5)一個C/C++工程需要用到其他.c .h .cpp類庫、函數庫時,其包含的方式有如下圖的幾種方式

  • 1、最直接的方式就是將該類庫的.h .cpp 直接引入到工程中,直接完全編譯
  • 2、另外的方法是先將該類庫生成爲一個靜態的lib庫,引入工程時只需包含.h以及.lib文件,編譯時將所需的方法具體實現從.lib中提取到可執行文件,可執行文件可不需要其他東西的支持就可直接運行
  • 3、常用的方法是將該類庫生成一個動態的lib庫,還有與之對應的.dll文件,引入工程時也只需包含.h以及.lib文件,但這個動態的.lib文件僅僅提供方法的聲明,具體的實現被打包在.dll文件中,因此運行生成的可執行文件需要.dll文件的支持

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章