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.

2voto

A T Points 1483

Si vous souhaitez éviter d'inclure explicitement un en-tête Windows SDK spécifique, vous pouvez procéder de la manière suivante :

#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
#define _AMD64_
#elif defined(i386) || defined(__i386) || defined(__i386__) || defined(__i386__) || defined(_M_IX86)
#define _X86_
#elif defined(__arm__) || defined(_M_ARM) || defined(_M_ARMT)
#define _ARM_
#endif

1voto

Laurie Stearn Points 458

Une autre raison de l'erreur (parmi beaucoup d'autres qui sont apparues lorsque l'on a changé le build cible d'un projet Win32 en X64) était que les compilateurs C++ 64 bits n'étaient pas installés, comme indiqué au début de la section cette page .
Pour faire suite au commentaire de philipvr sur les en-têtes enfants, (dans mon cas) une inclusion explicite de winnt.h être inutile quand Windows.h était utilisé.

0voto

Brian Points 1

Si vous construisez en 32bit, assurez-vous que vous n'avez pas _WIN64 défini pour votre projet.

0voto

The Oathman Points 67

Pour moi, j'utilisais glfw et imgui, et j'ai inclus ce fichier d'en-tête par erreur :

#include <stringapiset.h>

Je viens de le supprimer et cette erreur n'existe plus.

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