2015-06-22 59 views
1

使用MSVC時,是否使項目(A,exe)依賴於另一個項目(B,靜態庫)增加了exe文件大小的lib的大小?或者僅在項目B所需的編譯單元中進行鏈接?項目依賴關係的二進制概述C++

+5

* lib *是靜態還是動態?靜態庫會增加可執行文件的大小;動態或共享庫不會。 –

+0

B是一個靜態庫。 –

回答

1

如果B是一個靜態庫,A.exe的大小將增加大致 B的大小。兩個因素可以潛在地干預(在優化版本):

(1)未使用的函數和數據(/OPT:REF),其通常降低了可執行文件的大小消除,

(2)Link time code generation - 用於B.LIB激活時 - 通常使用大量內聯並用於增加可執行文件的大小。

[編輯]

我沒有注意到你的問題的這部分:連接默認情況下,靜態庫鏈接器將只加載被引用的OBJ文件時,確實如此。可以使用參考窗格(some details here)上隱含的「使用庫依賴項輸入」複選框或使用'Link Library dependency inputs'鏈接程序屬性的所有引用來覆蓋每個參考的默認行爲。