致命错误:Visual Studio中的“无目标体系结构”
当我尝试在Win32或x64模式下使用Visual Studio 2010编译我的c ++项目时,出现以下错误:
>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture"
我的预处理器定义说WIN32; _DEBUG; _CONSOLE;%(PreprocessorDefinitions)
什么是造成这个错误,我该如何解决它?
// winnt.h: lines 127-136, MSVS says this is an inactive preprocessor block #if defined(_WIN64) #if defined(_AMD64_) #define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD ) #elif defined(_IA64_) #define PROBE_ALIGNMENT( _s ) (TYPE_ALIGNMENT( _s ) > TYPE_ALIGNMENT( DWORD ) ? \ TYPE_ALIGNMENT( _s ) : TYPE_ALIGNMENT( DWORD )) #else #error "No Target Architecture" #endif
更新:我创build了一个新的msvs项目,并将我的代码复制到它。 我不再有error : "No Target Architecture"
,但现在我有一堆涉及winnt.h和winbase.h编译错误,并没有涉及我的任何文件的编译错误。 这些文件是否可能损坏? 我需要重新安装MSVS 2010吗?
更新2:所以我缩小了我的问题,发现它是#include <WinDef.h>
这是导致所有我编译错误与winnt.h,但我仍然不知道如何解决它。
使用#include <windows.h>
而不是#include <windef.h>
。
从windows.h
维基百科页面:
有一些自动包含在
windows.h
的子头文件。 这些文件中的大多数不能简单地被自己包含(它们不是自包含的 ),因为依赖关系。
windef.h
是windows.h
自动包含的文件之一。
另一个原因可能是在包含windows.h
之前,包含一个依赖于windows.h
的头文件。
在我的情况下,我在windows.h
之前包含了xinput.h
,并得到这个错误。 交换订单解决了这个问题。
_WIN32标识符未定义。
使用#include <SDKDDKVer.h>
MSVS生成的项目包装这包括通过生成一个本地"targetver.h"
,其中包括"stdafx.h"
通过"stdafx.cpp"
发送到预编译头。
编辑:你的命令行上有/ D“WIN32”吗?
看起来_AMD64_
没有被定义,因为我无法想象你正在编译安腾( _IA64_
)。
如果您正在构build32位,请确保您没有为您的项目定义_WIN64。
错误的另一个原因(在将Win32项目的目标版本更改为X64时出现的许多错误)没有安装C ++ 64位编译器,如本页顶部所述。
除了philipvr对子标题的评论之外(在我的情况下),当使用windows.h时,显式包含winnt.h是不必要的 。
我有一个类似的问题。 在我的情况下,我不winuser.h
在windows.h
之前包含了winuser.h
(实际上,一个有问题的IDE扩展已经添加了它)。 删除winuser.h
解决了这个问题。