Visual Studio 2010 IDE 64 位版本没有目标体系结构错误

Posted

技术标签:

【中文标题】Visual Studio 2010 IDE 64 位版本没有目标体系结构错误【英文标题】:No Target Architecture error with Visual Studio 2010 IDE 64-bit build 【发布时间】:2017-11-11 14:06:54 【问题描述】:

我有一个包含许多 dll 和 exe 项目的应用程序。我正在移植到 64 位版本,几乎一切正常。但是,我有一个无法在 64 位配置中正确构建的 exe 项目。奇怪的是它不会从 IDE 构建命令构建。如果我打开一个 64 位 VS 命令窗口并使用 msbuild 构建,它确实构建成功。

我查看了其他一些类似的问题和答案,这些问题和答案通常涉及额外(或缺失)的 windows.h 包含,但很难确定这是否是同一件事。我尝试了不同的包含组合,但没有发现明显的问题。

我可以在 VS IDE 中将项目构建为 32 位 exe 我无法在 VS IDE 中将项目构建为 64 位 exe 我可以在 64 位命令窗口中将项目构建为 64 位 exe

我已将 _WIN64 和 _AMD64 定义为预处理器定义。

如果我启用编译器选项以显示包含,我会看到:

1> 注意:包括文件:c:\dev\projects\myapp\myproject.root\myproject\stdafx.h 1> 注意:包括文件:c:\dev\projects\myapp\myproject.root\myproject\targetver.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\SDKDDKVer.h 1> 注意:包括文件:c:\dev\projects\myapp\myproject.root\myproject\resource.h 1> 注意:包含文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlbase.h 1> 注意:包含文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atldef.h 1> 注意:包含文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlrc.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\errno.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sal.h 1> 注意:包括文件:c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h 1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(27): error C2371: 'size_t' : redefinition;不同的基本类型 1> 预定义的 C++ 类型(编译器内部)(19):参见“size_t”的声明 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vadefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\malloc.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdbg.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windows.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\excpt.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdarg.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ctype.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings.h 1> 注意:包含文件:c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sal_supp.h 1> 注意:包含文件:c:\program files (x86)\microsoft sdks\windows\v7.0a\include\specstrings_supp.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_strict.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_undef.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h 1> 注意:包含文件:c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sdv_driverspecs.h 1> 注意:包括文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\kernelspecs.h 1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): 致命错误 C1189: #error: "No Target Architecture"

有什么建议吗?

【问题讨论】:

无需定义_WIN64_AMD64,只需在项目设置中将项目平台设置为x64,将链接器目标机器设置为machine64即可。 有趣。我删除了这些定义,现在一切都可以正确编译,但出现链接器错误:“致命错误 LNK1112:模块机器类型‘X86’与目标机器类型‘x64’冲突”。我有“x64”作为平台,链接器设置设置为机器类型 X64。 也许您对一个翻译单元有不同的设置或其他什么?例如对于预编译的头文件 .cpp? 我自己一直在检查。情况似乎并非如此。我认为问题在于不知何故没有定义架构类型。因此,当我尝试通过 IDE 编译并且它使用 32 位编译器时,它只能构建 32 位版本,因为(我假设)除非另有定义,否则它默认为 32 位。同样,当在 64 位 VS 命令提示符下使用 msbuild 进行构建并且所有 env 变量都设置为 64 位时,这是有效的,因为它默认为 64 位构建,并且包含中没有任何内容告诉它其他情况。 【参考方案1】:

我想我已经找到了答案。我将我的项目设置与我创建的一个新的空项目进行了比较。可执行目录的 VC++ 目录条目与我的不同。

默认目录以此开头: $(VCInstallDir)bin\x86_amd64;

我现有的项目没有。我将它添加到我的项目中,用于 64 位平台调试和发布配置,我现在可以构建 64 位版本。而且我仍然可以构建 32 位版本。

我假设该目录是 64 位编译器和链接器所在的位置。如果这是正确的,那么“无目标架构”错误似乎是针对该条件给出的奇怪错误消息。

【讨论】:

以上是关于Visual Studio 2010 IDE 64 位版本没有目标体系结构错误的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010:IDE 中类的 XML XSD 架构

Visual Studio 2010 中的设置是与解决方案一起存储还是与 IDE 一起存储?

visual studio 2010的应用程序在哪,那个文件里的哪个?

将目标更改为 x64 会破坏 Visual Studio 2017 中的 FLTK 构建

在 Visual Studio 2008 Express Edition (VS2008EE) 中配置 64 位编译

开发工具:Microsoft Visual Studio 2010