2014-03-26 81 views
3

我有Visual Studio 2012更新4和Windows SDK 7.1。Visual Studio 2012編譯爲XP - 無效的win32 - v110_xp

我選擇「Visual Studio 2012 - Windows XP(v110_xp)」工具包,並將include目錄更改爲使用$(WindowsSdkDir_71A)。

編譯期間沒有錯誤(例如,它成功找到winres.h),但是當我嘗試在Windows XP SP3上運行該exe時,它仍然錯誤:「test.exe不是有效的Win32應用程序。

對於測試,它只是一個C++ hello世界。

#include <cstdio> 

int main(void) 
{ 
    printf("Hello, World!\r\n"); 
    return 0; 
} 

如何使用Visual Studio 2012編譯XP?

我該如何檢查才能正常工作?

如何在命令行上測試編譯? 我目前正在測試這一命令行,仍然給出了無效的Win32錯誤的:

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe" /EHsc /MT /I"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include" /I"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include" main.cpp /link /LIBPATH:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib" 

更新: 它的工作原理,如果我使用這些指令的命令行: http://blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx

如果我把這些設置放到我的系統環境變量中,我也可以讓msbuild和visual studio編譯成功,但這並不理想。

+0

您是否在您的XP系統上安裝了MS VS Distribuable? – enedil

+1

有很少的方法可能會出錯,你可能只是複製了錯誤的EXE。項目+屬性,鏈接器,系統,最低要求版本是重要的設置。對於XP,必須是5.01。 –

+0

最低要求的版本是5.01。 XP上沒有可再發行組件,但它是靜態鏈接的(/ MT),它在Visual Studio 2010上運行。它也沒有給丟失的DLL錯誤,它給一個無效的Win32應用程序錯誤。 –

回答

4

,需要加以改變的設置是 項目屬性 - >配置屬性 - >鏈接器 - >系統 - >子系統

這需要設置爲控制檯或Windows爲合適的項目類型,但不即使控制檯vs GUI設置在其他地方並且它看起來可以工作(例如,WinMain是入口點,控制檯不會出現,等等),也會默認設置爲「空項目」。最低需求版本也需要5.01,但通過link.exe的命令行幫助來判斷,我認爲這不會做任何事情,除非設置了子系統。

檢查事項:

  • 的Visual Studio 2012 Update 1或更高
  • SDK 7.1的安裝和7.1A存在
  • 了 「的Visual Studio 2012 - Windows XP中(v110_xp)」 工具包使用
  • 預處理器定義包含_USING_V110_SDK71_
  • 的VC++目錄包含$(WindowsSdkDir_71A)斌,$(WindowsSdkDir_71A)包括和$(WindowsSdkDir_71A)LIB
  • 鏈接器子系統是控制檯或窗口,具有最低要求的版本5.01
+0

我將其設置爲/ MT。設置XP本地工具。將其設置爲x86。你的步驟終於解決了我的問題。謝謝。在OOOOOLD xp服務器上工作需要我編寫一些代碼。 –

相關問題