2011-10-25 43 views
1

我的鏈接器(來自Microsoft Visual C++ 2005的link.exe)可能會嘗試優化其作業,並且不會將文件包含的所有對象a *.lib靜態鏈接到最終的可執行文件中,這對於我來說是必需的,因爲後續的配置文件任務是必需的。我如何強制link.exe將所有符號(即使在源代碼中未被引用)包含到最終的可執行文件中?鏈接器optizimation

所以問題是我有一個庫文件,mylib.lib,其中包含foo.obj,bar.objqux.obj

我的源代碼文件引用了foo.obj中的符號。

當我將靜態源代碼鏈接到庫文件mylib.lib時,它僅鏈接到foo.obj,沒有其他符號連接到最終可執行文件,而我需要它們(以便它們隨進程一起加載到內存中)。

我嘗試了很多解決方案,沒有成功。它是優化嗎?我不想要它。

回答

1

在某種程度上,這就是連接器的工作原理 - 它們挑選那些包含庫引用的符號或其應該構建的可執行文件的對象模塊,並忽略其餘部分。這不是一個真正的優化,而是他們應該工作的方式。

確保將其他目標文件鏈接到可執行文件中的最簡單方法是引用其中的符號。只要確保已關閉「功能級別鏈接」,因爲這會消除引用符號的效果。