在VS 2008上编译32位程序

时间:2011-01-17 22:47:12

标签: visual-studio-2008 compiler-construction 32bit-64bit

我一直在XP PC上开发VC ++ 2003,但我现在在Windows 7上购买了VS 2008的廉价法律副本以继续在同一个项目上工作。我的产品必须继续在客户的XP系统上运行,因此我对32位可执行文件非常感兴趣。

我遇到的第一个问题是PRJ0003错误“产生cl.exe”。我不得不将这个文件的路径添加到VC ++目录设置中(它出现在bin \ amd64和bin \ x86_amd64目录中,但我不认为我使用的是输出方式吗?)。

我现在遇到的问题(不计算将strcpy转换为strcpy_s等繁琐的清理工作)是因为我不清楚我是否正在生成一个32位或64位的exe。我的项目属性设置为“Win32”的目标,所以我认为一切都很好。这是对的吗?

我已经阅读了一些有关这方面的讨论,但是他们是否在讨论编译器本身是运行x64还是x86,或者编译的代码是x64还是x86,以及它是如何区分的,这一点也不是很清楚。< / p>

我正在做正确的事情来生成一个32位的Win32,x-86程序吗?

2 个答案:

答案 0 :(得分:0)

bin \ amd64是AMD64的64位编译器; bin \ x86_amd64是AMD64的x86交叉编译器。如果你想要一个32位可执行文件,那么bog标准编译器就是普通的旧bin。我使用VS2008已经有一段时间但是如果你的目标是Win32,我认为它应该使用标准的32位编译器,而不是64位编译器或交叉编译器。

如果您想检查并确认,请抓住Dependency Walker并在其中打开您的可执行文件。如果模块树中的模块图标上有一个垂直的“64”,那么你已经构建了一个64位的可执行文件;如果只有普通的模块图标,那么它是32位的,你很好。

答案 1 :(得分:0)

假设您没有完全搞砸安装,那么在VS2008中,很难用32位项目平台意外创建64位可执行文件(我一直试图强迫它为我自己创建原因似乎总是在链接阶段搞砸了)。但是,如果您的项目使用Makefile,那么最终使用错误的32/64位数会更容易,尤其是在从命令行构建时。通常,除非您专门设置了64位项目,否则所有内容都应该构建为32位。

鉴于看起来编译器路径混乱,我建议修复VS2008,然后做工具 - &gt;导入和导出设置 - &gt;重置所有设置。然后检查一个干净的源代码树,以确保没有任何不正确的构建工件。

对于strcpy_s修复,请记住编译器会给出警告而不是错误。如果您不想收到警告,请将_CRT_SECURE_NO_WARNINGS设置为预处理器宏。