【问题标题】:Compiling 32-bit Program on VS 2008在 VS 2008 上编译 32 位程序
【发布时间】:2011-01-18 07:26:49
【问题描述】:

我一直在 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,以及这是如何区分的。

那么生成 32 位、Win32、x-86 程序的做法是否正确?

【问题讨论】:

  • 有多便宜?你只是从别人的机器上复制安装目录吗?这当然可以解释 PRJ0003。接下来的 20 个 SO 问题你将开始。
  • 可能需要 ATL 服务器组件。 VS2008 没有附带它(显然它已移至 CodePlex)。但是,它不会抱怨 cl.exe 吗? Project Build Error PRJ0003 - Visual Studio 2008
  • 让我休息一下,汉斯。它是 Microsoft DVD 上的 OEM 发行版,磁盘信封背面带有有效的 Microsoft 产品密钥。它只是便宜(100 美元),因为它现在是旧版本。

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


【解决方案1】:

假设您没有完全搞砸安装,那么在 VS2008 中,使用 32 位项目平台意外创建 64 位可执行文件是非常困难的(我一直试图强迫它为我自己这样做原因,它似乎总是在链接阶段搞砸了)。但是,如果您的项目使用 Makefiles,那么以错误的 32/64 位结尾会容易得多,特别是如果您是从命令行构建的。通常,除非您专门设置了 64 位项目,否则一切都应该构建 32 位。

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

至于strcpy_s 修复,请记住编译器给您的是警告而不是错误。如果您不想被警告,那么只需将_CRT_SECURE_NO_WARNINGS 设置为预处理器宏。

【讨论】:

  • 我只是从 IDE 构建的,所以我将继续按照您的建议检查可执行文件。我从 DVD 进行了完整安装,但也会重新检查安装。我了解这些警告,但不妨利用一个有用的新功能。自从我在大多数地方使用 CString 以来,我真的没有那么多。
【解决方案2】:

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

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

【讨论】:

  • 实际上 cl.exe 的唯一副本位于 bin 子目录中 - 而不是 bin 本身。但是,我意识到 cl.exe 不是实际的编译器,所以它可能在另一个目录中使用编译器本身。我真的不太熟悉 VS 的结构,因为它以前一直对我“正常工作”。
  • @gordonwd:我已经有一段时间没有使用过 VS2008,但我仍然将它安装在我的桌面上。并且编译器工具链确实在 bin\ 本身中。 2005 年和 2010 年也是如此。 Screeny:i.imgur.com/91Fmi.png 至于 cl.exe 本身,你是对的,它不是编译器,而是前端(就像 gcc 只是实际 GCC 编译器的前端一样)。 c1*.dll 和 c2.dll 是实际的编译器组件,它们与 cl.exe 共享同一目录。如果您的 bin 目录中没有所有这些,那么您的 VS2008 副本可能不像您想象的那么合法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
相关资源
最近更新 更多