163 votes

Erreur fatale : "No Target Architecture" dans Visual Studio

Lorsque j'essaie de compiler mon projet c++ avec Visual Studio 2010 en mode Win32 ou x64, j'obtiens l'erreur suivante :

>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture"

Mes définitions de préprocesseur disent WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)

Quelle est la cause de cette erreur et comment puis-je la corriger ?

// 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

Mise à jour : j'ai créé un nouveau projet msvs et j'y ai copié mon code. Je n'ai plus de error : "No Target Architecture" Mais maintenant j'ai un tas d'erreurs de compilation impliquant winnt.h et winbase.h et aucune erreur de compilation n'impliquant aucun de mes fichiers. Est-il possible que ces fichiers soient corrompus ? Dois-je réinstaller MSVS 2010 ?

Mise à jour 2 : J'ai réduit mon problème et j'ai découvert qu'il s'agit de #include <WinDef.h> qui est à l'origine de toutes mes erreurs de compilation avec winnt.h mais je ne sais toujours pas comment y remédier.

5voto

Edwin Points 2152

L'identifiant _WIN32 n'est pas défini.

utiliser #include <SDKDDKVer.h>

Les projets générés par MSVS enveloppent cette inclusion en générant un fichier local de "targetver.h" qui est incluse par "stdafx.h" qui est compilé dans un en-tête précompilé par l'intermédiaire de "stdafx.cpp" .

EDIT : avez-vous un /D "WIN32" sur votre ligne de commande ?

4voto

David Heffernan Points 292687

Il semblerait que _AMD64_ n'est pas défini, car je ne peux pas imaginer que vous compilez pour Itanium ( _IA64_ ).

4voto

MxNx Points 703

J'ai eu un problème similaire. Dans mon cas, j'avais accidentellement inclus winuser.h avant windows.h (en fait, une extension boguée de l'IDE l'avait ajoutée). En supprimant le winuser.h a résolu le problème.

4voto

Andrea Araldo Points 355

Au début du fichier que vous compilez, avant tout include essayez de mettre UNE de ces lignes

#define _X86_
#define _AMD64_
#define _ARM_

Choisissez la bonne, une seule, en fonction de votre architecture.

2voto

ShitalShah Points 2213

Outre les causes déjà décrites, j'ai reçu cette erreur parce que j'avais inclus :

#include <fileapi.h>

Apparemment, il n'était pas nécessaire (malgré l'appel à CreateDirectoryW). Après l'avoir commenté, le compilateur était content. Très étrange.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X