我一直在 XP PC 上使用 VC++ 2003 进行开发,但现在使用的是 Windows 7,并购买了 VS 2008 的廉价正版副本以继续从事同一个项目。我的产品必须继续在客户的 XP 系统上运行,因此我对 32 位可执行文件非常感兴趣。
我遇到的第一个问题是 PRJ0003 错误“spawning cl.exe”。我必须将此文件的路径添加到 VC++ 目录设置中(它同时出现在 bin md64 和 bin\x86_amd64 目录中,但我认为我使用的输出方式并不重要?)。
我现在遇到的问题(不包括将 strcpy 转换为 strcpy_s 等繁琐的清理工作)是我不清楚我是生成 32 位还是 64 位 exe。我的项目属性设置为“Win32”目标,所以我认为一切都很好。这是正确的吗?
我读过一些关于此的讨论,但不太清楚他们是否在谈论编译器本身是否运行 x64 与 x86,或者编译后的代码是否是 x64 与 x86,以及如何区分。
那么我生成 32 位、Win32、x-86 程序的做法是否正确?
假设您的安装没有完全混乱,那么在 VS2008 中,很难意外地使用 32 位项目平台创建 64 位可执行文件(出于我自己的原因,我一直试图强制它这样做,并且它似乎总是在链接阶段搞砸)。 然而,如果您的项目使用 Makefile,那么很容易最终得到错误的 32/64 位,特别是如果您从命令行构建的话。 一般来说,除非您专门设置了 64 位项目,否则一切都应该只构建 32 位。
鉴于编译器路径看起来很混乱,我建议修复 VS2008,然后执行“工具”->“导入和导出设置”->“重置所有设置”。 然后检查干净的源代码树,以确保您没有任何不正确的构建工件。
至于
strcpy_s
修复,请记住编译器给您的是警告而不是错误。 如果您不想收到警告,只需将 _CRT_SECURE_NO_WARNINGS
设置为预处理器宏即可。
bin md64 是 AMD64 的 64 位编译器; bin\x86_amd64 是 AMD64 的 x86 交叉编译器。如果您想要 32 位可执行文件,则 bog 标准编译器位于普通的旧 bin 中。我已经有一段时间没有使用 VS2008 了,但如果你的目标是 Win32,我认为它应该使用标准的 32 位编译器,而不是 64 位编译器或交叉编译器。
如果您想检查并确定,请获取 Dependency Walker 并在其中打开可执行文件。如果模块树中的模块图标上有一个垂直的“64”,那么您已经构建了一个 64 位可执行文件;如果只有简单的模块图标,那么它是 32 位的,就可以了。