我正在尝试使用MS Visual Studio 2013和BAT文件在Win7 64位系统上构建32位EXE,而不是在GUI中构建。
根据https://msdn.microsoft.com/en-us/library/f2ccy3wt(v=vs.120).aspx,所有需要做的就是使用“x86”选项运行VCVARSALL。这应该设置一堆环境变量,使工具发出32位代码。当我这样做时,一切都完成没有错误。生成的EXE在64位系统上正确运行。在WinXP 32位系统上会弹出一个窗口,说明它不是有效的32位应用程序。
我已将所有这些放入BAT文件中以准确显示我正在做的事情。此BAT文件删除所有派生文件,以确保它们实际构建,并且不仅仅是在以前的尝试中。它还在VCVARSALL之前设置相关的环境变量(我知道),以确保VCVARSALL没有完全处理的某些奇怪的先前设置。
以下是BAT文件:
@echo off
rem
rem Test of building a 32 bit executable.
rem
rem See: https://msdn.microsoft.com/en-us/library/f2ccy3wt(v=vs.120).aspx
rem
setlocal
if exist hello.exe del hello.exe
if exist hello.exp del hello.exp
if exist hello.lib del hello.lib
if exist hello.obj del hello.obj
set include=
set lib=
set libpath=
set VS120COMNTOOLS=
set vstudio=
set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
call "%MSVCDir%\vcvarsall" x86
cl /c hello.c /Fohello.obj
link /out:hello.exe /incremental:no hello.obj
同样,结果是HELLO.EXE在此系统上运行良好,但在32位系统上运行不正确。
如何在这个64位系统上构建32位EXE?