1. 程式人生 > >OBJ、LIB、DLL與EXE之間的關係

OBJ、LIB、DLL與EXE之間的關係

  1. OBJ是中間程式碼檔案、LIB是靜態庫檔案、DLL是動態庫檔案、EXE是可執行檔案。
  2. 對於靜態庫檔案,連結的時候把其中需要的東西抽取出來嵌入到EXE中,EXE較大。
  3. 對於動態庫檔案,EXE執行的時候依賴於DLL提供的功能,沒有DLL則EXE無法執行,EXE較小。
  4. 一個C或CPP檔案被編譯後既是一個OBJ,當所有必須要的C或CPP都被編譯成OBJ後再統一連結成EXE。
  5. LIB或DLL可以被看成是一堆OBJ的組合,釋出後可以被連結入其它EXE或被其它EXE呼叫。
  6. LIB不可以呼叫其它LIB或DLL,DLL可以呼叫其它LIB或DLL。
  7. 動態庫有LIB檔案和DLL檔案。LIB檔案必須在編譯期就被連結到應用程式中,而DLL在執行期才會被呼叫。如果有DLL檔案,則對應的LIB檔案一般是一些索引資訊,具體的實現在DLL檔案中。如果只有LIB檔案,那麼這個LIB檔案是靜態庫檔案,索引和實現都在其中。靜態庫檔案有好處,給使用者安裝時就不需要再掛動態庫了;但也有缺點,即導致EXE較大且失去了動態庫的靈活性,在版本升級時,同時要釋出新的EXE才行。
  8. 在動態庫的情況下,有兩個檔案,一個是LIB檔案、一個是DLL檔案,LIB檔案包含被DLL匯出的函式的名稱和位置,DLL包含實際的函式和資料,應用程式使用LIB檔案連結到所需要使用的DLL檔案,庫中的函式和資料並不複製到可執行檔案中,因此在EXE檔案中存放的不是被呼叫的函式程式碼,而是DLL中所要呼叫的函式的記憶體地址,這樣當一個或多個應用程式執行時再把程式程式碼和被呼叫的函式程式碼連結起來,從而節省了記憶體資源。