Неустранимая ошибка:" нет целевой архитектуры " в Visual Studio
когда я пытаюсь скомпилировать свой проект c++ с помощью Visual Studio 2010 в режиме Win32 или x64, я получаю следующую ошибку:
>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.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
обновление: я создал новый проект msvs и скопировал в него свой код. У меня больше нет error : "No Target Architecture", но теперь у меня есть куча ошибок компиляции с участием winnt.h и winbase.h И никаких ошибок компиляции, связанных с любым из моих файлов. Возможно ли, что эти файлы повреждены? Нужно ли переустановить MSVS 2010?
обновление 2: поэтому я сузил свою проблему и обнаружил, что это #include <WinDef.h> это вызывает все мои ошибки компиляции с winnt.но я все еще не знаю, как это исправить.
9 ответов:
использовать
#include <windows.h>вместо#include <windef.h>.С
windows.hВикипедии страницы:есть несколько дочерних заголовочных файлов, которые автоматически включаются в
windows.h. Многие из этих файлов не могут быть просто включены сами по себе (они не автономного), из-за зависимостей.
windef.hявляется одним из файлов, автоматически включенных вwindows.h.
еще одна причина этого может быть в том числе заголовок, который зависит от
windows.h, передwindows.h.в моем случае я включил
xinput.hдоwindows.hи получил эту ошибку. Замена заказа решила проблему.
идентификатор _WIN32 не определен.
использовать
#include <SDKDDKVer.h>MSVS генерируемые проекты обернуть это включает в себя путем создания локального
"targetver.h", который включен"stdafx.h"это комилируется в предварительно скомпилированный заголовок через"stdafx.cpp".EDIT: у вас есть A /D "WIN32" в командной строке ?
казалось бы
_AMD64_не определено, так как я не могу себе представить, что вы компилируете для Itanium (_IA64_).
еще одна причина ошибки (среди многих других, которые возникли при изменении целевой сборки проекта Win32 на X64) не было установлено 64-разрядных компиляторов C++, как указано в верхней части на этой странице.
В дополнение к комментарию philipvr о дочерних заголовках (в моем случае) явное включение winnt.h будучи лишних, когда windows.h используется.
у меня была похожая проблема. В моем случае, я случайно включил
winuser.hдоwindows.h(на самом деле, расширение багги IDE добавил его). Удалениеwinuser.hрешена проблема.
нужно, чтобы установить это, чтобы избавиться от этой проблемы , возьмите свежий код smaple, а затем скомпилируйте ...
помимо уже описанных причин, я получил эту ошибку, потому что я бы включил:
#include <fileapi.h>видимо это было не нужно (несмотря на CreateDirectoryW вызова). После комментирования, компилятор был счастлив. Очень странный.
Comments