我想使用Windows SDK 7.1 for x86_32編譯C++項目。 我使用乾淨的Windows XP SP3 x86_32和最新更新。 項目(名稱無所謂)是一個跨平臺項目,使用Makefiles(不包括vcxproj/msbuild)構建,僅包含非託管C++代碼(不包含C#或其他託管代碼)。在沒有.NET Framework 4.0的情況下使用Windows SDK 7.1編譯C++代碼
我已經安裝了Windows SDK 7.1(它需要.NET Framework 2.0運行安裝程序和.NET Framework 4.0來安裝C++編譯器),使用SDK中的SetEnv.cmd腳本設置編譯環境併成功構建項目。
現在我需要使用相同的Windows SDK在不同的Windows版本(2003,Vista,7,2008)上測試版本。我不想每次需要在乾淨的操作系統上測試構建時從ISO安裝Windows SDK - 這需要很長時間。相反,我想擁有一個使用C++編譯器的文件夾,可以將其複製到清理Windows實例,將代碼源複製到其旁邊並運行批處理腳本以開始構建。
因此,我將所有Windows SDK文件複製到卸載Windows SDK,C++編譯器和.NET Framework 2.0的另一個文件夾中。將Windows SDK文件複製回原始文件夾(我可以將它們移動到任何改變SetEnv.cmd腳本的地方)。之後,構建工作正常。
但是當我卸載.NET Framework 4.0中,建立在link.exe
調用失敗:
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
我想,這link.exe
使用來自.NET Framework 4.0中安裝一些庫和工具,所以我卸載之前複製C:\WINDOWS\Microsoft.NET
文件夾然後將其複製回原來的位置。這沒有幫助。
我搜索了LNK1123
,只有建議是:「安裝VS2010SP1」(我根本沒有使用)和「重新安裝.NET Framework 4.0」(這是可行的,但這正是我試圖避免的)。
不同的編譯器不是一個選項:在Windows上,此項目僅支持VS2010(包含在Windows SDK 7.1中)的編譯器。
我在困惑 - 做link.exe
從Windows SDK的x86_32 7.1真的需要的.NET Framework 4.0 運行(不是一些圖書館或本地工具)來構建完全本地和非託管 C++代碼(即不會以任何方式與CLR一起使用)?
LINK.EXE還用於鏈接混色: 要在乾淨的Windows XP SP3(既不SDK也不框架曾經被安裝在這裏),這些庫必須添加到
%PATH%
運行Windows SDK 7.1工具鏈的副本模式組件。您可以運行dumpbin.exe/imports並在mscoree.dll(.NET引導程序)上看到隱式依賴關係。你甚至啓動它的唯一原因是你可能沒有正確卸載.NET。隨機失敗將是下一個。所以是的,它絕對需要.NET。 –@HansPassant,感謝提示延遲加載依賴關係,我重新調試dll,'mscoree.dll'不是構建所必需的,但msvcr100_clr0400.dll是必需的,並且在框架卸載後錯過了'system32'。 – alexkasko