Неустранимая ошибка:" нет целевой архитектуры " в 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.но я все еще не знаю, как это исправить.

1276   9  

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_).

Если вы строите 32bit, то убедитесь, что у вас нет _WIN64, определенного для вашего проекта.

еще одна причина ошибки (среди многих других, которые возникли при изменении целевой сборки проекта Win32 на X64) не было установлено 64-разрядных компиляторов C++, как указано в верхней части на этой странице.
В дополнение к комментарию philipvr о дочерних заголовках (в моем случае) явное включение winnt.h будучи лишних, когда windows.h используется.

у меня была похожая проблема. В моем случае, я случайно включил winuser.h до windows.h (на самом деле, расширение багги IDE добавил его). Удаление winuser.h решена проблема.

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects

нужно, чтобы установить это, чтобы избавиться от этой проблемы , возьмите свежий код smaple, а затем скомпилируйте ...

помимо уже описанных причин, я получил эту ошибку, потому что я бы включил:

#include <fileapi.h>

видимо это было не нужно (несмотря на CreateDirectoryW вызова). После комментирования, компилятор был счастлив. Очень странный.

Comments

    Ничего не найдено.