Cuando intento compilar mi proyecto de C ++ usando Visual Studio 2010 en modo Win32 o x64, aparece el siguiente error:
>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture"
Mis definiciones de preprocesador dicen WIN32; _DEBUG; _CONSOLE;% (PreprocessorDefinitions)
¿Qué está causando este error y cómo lo soluciono?
// 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
Actualización: creé un nuevo proyecto de msvs y copié mi código en él. Ya no lo tengo error : "No Target Architecture"
, pero ahora tengo un montón de errores de compilación que involucran winnt.hy winbase.hy no hay errores de compilación que involucren ninguno de mis archivos. ¿Es posible que estos archivos estén dañados? ¿Necesito reinstalar MSVS 2010?
Actualización 2: Así que reduje mi problema y descubrí que es el #include <WinDef.h>
que está causando todos mis errores de compilación con winnt.h, pero todavía no sé cómo solucionarlo.
fuente
Respuestas:
Utilizar en
#include <windows.h>
lugar de#include <windef.h>
.Desde la
windows.h
página de wikipedia:windef.h
es uno de los archivos incluidos automáticamente conwindows.h
.fuente
#error Hey man you gotta choose a target.
. ¿Qué más podría arreglar eso?Otra causa de esto puede ser incluir un encabezado que depende de
windows.h
, antes de incluirlowindows.h
.En mi caso incluí
xinput.h
anteswindows.h
y obtuve este error. Cambiar el orden resolvió el problema.fuente
El identificador _WIN32 no está definido.
utilizar
#include <SDKDDKVer.h>
Los proyectos generados por MSVS envuelven esta inclusión generando un local
"targetver.h"
que se incluye y"stdafx.h"
se compila en un encabezado precompilado"stdafx.cpp"
.EDITAR: ¿tiene un / D "WIN32" en su línea de comandos?
fuente
_WIN32
lugar deWIN32
? No es mi área de especialización, pero dado que el encabezado está buscando_WIN64
'_AMD64_`, etc., parecería plausible.Parece que
_AMD64_
no está definido, ya que no puedo imaginar que esté compilando para Itanium (_IA64_
).fuente
_AMD64_
o_IA64_
, entonces no obtendría el error. Eso es lo que dice el archivo de encabezado.Resuélvalo colocando primero los siguientes archivos de inclusión y definición:
fuente
#include <WinUser.h>
.Al principio del archivo que está compilando, antes que ninguno
include
, intente poner UNA de estas líneasElija el adecuado, solo uno, según su arquitectura.
fuente
Si está utilizando Resharper, asegúrese de que no agregue el encabezado incorrecto para usted, los casos muy comunes con ReSharper son:
-
#include <consoleapi2.h
-
#include <apiquery2.h>
ACTUALIZACIÓN :
Otra sugerencia es verificar si está incluyendo un "Windows.h parcial", lo que quiero decir es que si incluye, por ejemplo, winbase.ho minwindef.h puede terminar con ese error, agregue "el grande" en su lugar Windows.h. También hay algunos casos menos obvios por los que pasé, el más notable fue cuando solo incluí synchapi.h, los documentos indican claramente que es el encabezado que se incluirá para algunas funciones como AcquireSRWLockShared, pero activó la arquitectura No target, la solución era eliminar synchapi.h e incluir "el gran" Windows.h. Windows.h es hughe, define macros (muchas de ellas eliminan el error de arco No target) e incluyen muchos otros encabezados. En resumen , siempre verifique si está incluyendo algún encabezado que pueda ser reemplazado por Windows.
fuente
Otra razón del error (entre muchas otras que surgieron al cambiar la compilación de destino de un proyecto Win32 a X64) fue no tener los compiladores C ++ de 64 bits instalados como se indica en la parte superior de esta página .
Además del comentario de philipvr sobre los encabezados secundarios, (en mi caso) una inclusión explícita de winnt.h es innecesaria cuando se usa windows.h .
fuente
Tuve un problema similar. En mi caso, lo había incluido accidentalmente
winuser.h
anteswindows.h
(en realidad, una extensión IDE con errores lo había agregado). Eliminar elwinuser.h
solucionó el problema.fuente
consoleapi2.h
Además de las causas descritas ya, recibí este error porque incluiría:
Aparentemente no fue necesario (a pesar de la llamada CreateDirectoryW). Después de comentar, el compilador estaba feliz. Muy extraño.
fuente
Si está construyendo 32 bits, asegúrese de no tener _WIN64 definido para su proyecto.
fuente