2011-05-22 41 views
2

Possible Duplicate:
Issue using Visual Studio 2010 compiled C++ DLL in Windows 2000MS C++(CL)編譯的可執行文件不能在Windows工作2000

類似這些問題:
  Can I use Visual Studio 2010's C++ compiler with Visual Studio 2008's C++ Runtime Library?
  Can VS2010 create native executable file working under Windows 2000?


我有我編譯C++代碼從命令行(使用CL.EXE)使用VS2010 (CL版本16.00.30319.0)一個WinXP的機器上,但我希望得到的原生(x86)的可執行程序在WIN2000,WINXP運行等

舊版本CL的(VC98,版本12.00.8186)做的工作就好了,但的VS2010版本產生一個可執行的是,當在Win2000運行,導致彈出錯誤:

foo.exe is not a valid Win32 application

該溶液必須在CL compilerlinker options,不VisualStudio的設置或屬性的形式。我不需要任何新的C++語言特性,因爲代碼已有幾年的歷史,並且可以被移植到其他操作系統,我只需要本地代碼(x86,而不是.NET或CLI)可執行文件。

(參見例子http://david.tribble.com/src/crlf.cpphttp://david.tribble.com/src/detab.cpp。)

我想我可以繼續使用舊的編譯器(VS 9.0)在我的新的開發環境(操作系統,並最終Windows 7中),但是,似乎是一個不太比理想的方案。毫無疑問,MS仍然提供了一種創建本機可執行文件的方式,這些可執行文件可向後兼容較舊的但仍然存在的Windows操作系統?

+0

@比利:好的微軟,開發者最好的朋友。 – 2011-05-22 17:11:12

+0

我認爲對Win2k的支持也在幾年前結束......但是由於您使用的是2010版本,因此它已經建立了在VC9配置中構建可執行文件的支持。 – RedX 2011-05-22 17:13:39

+0

@RedX:來自CL命令行的VC9支持? – 2011-05-22 17:15:56

回答

2

通過使用editbin將PE頭中的「Minimum OS version」字段設置爲0x0500(Windows 2000),可以修復您的錯誤「foo.exe不是有效的Win32應用程序」。

EDITBIN /VERSION:5,0 foo.exe 

你需要爲這個舊版本EDITBIN的,或第三方工具,因爲新的「健全性檢查」,你給它的版本。

之後,應用程序將加載,但它可能會開始抱怨kernel32.dll中缺少的功能。

比利的問題,你會鏈接到比任何聰明的程序員想去的兔子洞更遠。

+0

'EDITBIN /VERSION:5.0 /SUBSYSTEM:CONSOLE.5.0 foo.exe'就像你說的那樣工作,但加載失敗,因爲它無法在'KERNEL32.DLL'中找到'DecodePointer'。 – 2011-05-26 00:58:14

相關問題