Не удается открыть источник файл ntddk h
Компилятор создает ошибку C1083, когда не удается найти требуемый файл. Эта ошибка имеет несколько возможных причин. Наиболее распространенными причинами являются неверный путь поиска include или отсутствующие или неправильно именованные файлы заголовков, но другие типы файлов и проблемы могут также вызвать C1083. Ниже приведены некоторые распространенные причины, по которым компилятор создает эту ошибку.
Указано неверное имя файла
При вводе имени файла допущена ошибка. Например, примененная к объекту директива
Файл не включен в путь поиска включаемых файлов
Это указывает компилятору искать файл в том же каталоге, который содержит исходный файл, а затем искать в других местах, заданных средой сборки. Если кавычки содержат абсолютный путь, компилятор выполняет поиск файла только в этом расположении. Если кавычки содержат относительный путь, компилятор выполняет поиск файла в каталоге относительно исходного каталога.
Если имя заключено в угловые скобки,
Если включаемые файлы находятся в другом каталоге относительно исходного каталога и в директивах Include используется относительный путь, то вместо угловых скобок следует использовать двойные кавычки. Например, если файл заголовка myheader.h находится в подкаталоге именованных заголовков проекта, в этом примере не удается найти файл и вызывается C1083:
но этот пример работает:
Проблемы с библиотекой сторонних производителей и vcpkg
если вы видите эту ошибку при попытке настроить библиотеку стороннего производителя в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущей список библиотек сторонних производителейи задает все свойства конфигурации и зависимости, необходимые для успешной сборки в рамках проекта.
Файл находится в проекте, но не в пути поиска включаемых файлов
Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. В новом проекте используются пути поиска include по умолчанию. Может потребоваться изменить путь поиска include, чтобы добавить каталог для проекта. При компиляции в командной строке добавьте путь к переменной среды include или /I параметр компилятора, чтобы указать путь к файлу.
чтобы задать путь к каталогу включения в Visual Studio, откройте диалоговое окно страницы свойств проекта. выберите VC++ каталоги в разделе свойства конфигурации в левой области, а затем измените свойство включаемые каталоги . дополнительные сведения о каталогах для отдельных пользователей и проектов, поиск которых выполняется компилятором в Visual Studio, см. в разделе страница свойств VC++ directories. Дополнительные сведения о /I параметре компилятора см. в разделе /I (дополнительные каталоги включаемых данных).
Не задана среда командной строки INCLUDE или LIB
Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный в переменной среды include или lib , задан неправильно, может быть сформирована ошибка C1083. Мы настоятельно рекомендуем использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок с командной строкой. Дополнительные сведения см. в разделе сборка C/C++ в командной строке. Дополнительные сведения об использовании переменных среды см. в разделе инструкции. Использование переменных среды в сборке.
Возможно, файл заблокирован или используется
Если для изменения или доступа к файлу используется другая программа, файл может быть заблокирован. Попробуйте закрыть файл в другой программе. иногда другая программа может быть Visual Studio сама по себе при использовании параметров параллельной компиляции. Если отключить параметр параллельной сборки, то эта ошибка исчезнет, а это проблема. Эта проблема также может быть вызвана другими системами параллельной сборки. Будьте внимательны при задании зависимостей файлов и проектов, чтобы порядок сборки был правильным. В некоторых случаях рекомендуется создать промежуточный проект для принудительного создания последовательности зависимостей для общего файла, который может быть создан несколькими проектами. Иногда антивирусные программы временно блокируют недавно измененные файлы для проверки. Если возможно, рассмотрите возможность исключения каталогов сборки проекта из антивирусного сканера.
Включена неправильная версия имени файла
Предкомпилированные заголовки еще не скомпилированы
Если проект настроен для использования предварительно скомпилированных заголовков, необходимо .pch создать соответствующие файлы, чтобы можно было скомпилировать файлы, использующие содержимое заголовка. например, pch.cpp файл ( stdafx.cpp в Visual Studio 2017 и более ранних версий) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичном проекте процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе Создание предкомпилированных файлов заголовков.
Дополнительные причины
Вы установили пакет SDK или библиотеку стороннего производителя, но после установки пакета SDK или библиотеки не открывали новое окно командной строки разработчика. Если пакет SDK или библиотека добавляет файлы в путь поиска включаемых файлов, может потребоваться открыть новое окно командной строки разработчика, чтобы получить эти изменения переменных среды.
Файл использует управляемый код, но параметр компилятора /clr не указан. Дополнительные сведения см. в разделе /clr (компиляция среды CLR).
Файл компилируется с использованием другого параметра /analyze компилятора, чем используется для предварительной компиляции заголовков. При предварительной компиляции заголовков для проекта все должны использовать одни и те же /analyze Параметры. дополнительные сведения см. в разделе /analyze (Code Analysis).
файл или каталог был создан подсистема Windows для Linux, учитывается регистр в каждом каталоге, и указанный регистр пути или файла не соответствует регистру пути или файла на диске.
Файл, каталог или диск доступен только для чтения.
Visual Studio или средства командной строки не имеют достаточных разрешений для чтения файла или каталога. это может произойти, например, когда файлы проекта имеют разные права владения, чем процесс, выполняемый Visual Studio или программ командной строки. иногда эту ошибку можно устранить, запустив Visual Studio или командную строку разработчика от имени администратора.
Недостаточно дескрипторов файлов. Закройте часть приложений и повторите компиляцию. Эта ситуация маловероятна в обычных условиях. Однако она может возникать при построении крупных проектов на компьютере с ограниченной физической памятью.
Пример
В следующем примере создается ошибка C1083, если файл заголовка "test.h" не существует в исходном каталоге или в пути поиска include.
Сведения о том, как создавать проекты C/C++ в интегрированной среде разработки или в командной строке, а также сведения о настройке переменных среды см. в разделе проекты и сборки систем.
Я пытаюсь заняться разработкой драйверов (очередь «не делай этого») Я просматривал эту страницу msdn и после установки WDK (Windows Driver Kit) 10 Я все еще не могу скомпилировать пример, который они используют на этой странице.
Как я могу это решить?
Вам нужно добавить путь заголовков WDK к вашим каталогам vcxproj include:
Свойства vcxproj - & gt; C / C ++ - & gt; Общие - & gt; Дополнительные каталоги включения
P.S .: Убедитесь, что вы устанавливаете SDK 10 вместе с WDK 10.
P.P.S: Без SDK вы получите ошибку Cannot open include file: 'ntdef.h'
Я тоже столкнулся с подобной проблемой. Ниже сработало для меня:
Шаг 1 : известно о целевой платформе Windows, для которой вы собираетесь разработать драйвер. Вы можете проверить «Версия Windows» в своей системе, просмотрев Настройки-> Система-> О программе- & gt; Спецификация Windows.
Шаг 2 . Убедитесь, что вы установили совместимые «Windows SDK» и «WinSDK», соответствующие целевой версии платформы Windows.
Шаг 3 . Убедитесь, что "ntddk.h" существует в $ (DDK_INC_PATH). Этот макрос препроцессора обычно оценивается как «C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \\ km». Если вы не видите папку km, внимательно следуйте ссылкам, указанным в шаге 2 выше.
Шаг 4 . Проверьте свойства проекта - & gt; Свойства конфигурации - & gt; Общие - & gt; Platform Toolset использует "WindowsKernelModeDriver".
Решил это, выбрав другую «версию Windows SDK» в Visual Studio в разделе «Свойства проекта» -> «Общие».
В каталоге C:\Program Files (x86)\Windows Kits\10\Include у меня 5 папок с Windows SDK. В самом новом (10.0.17763.0) не было подпапки km . После изменения версии Windows SDK с 10.0.17763.0 на 10.0.17134.0 в Visual Studio был обнаружен заголовок ntddk.h .
Практическое правило
Если вам нужно выполнить сборку с использованием последней (или конкретной) версии WDK, убедитесь, что установлена соответствующая версия Win SDK.
Предполагаемая причина
В процессе отладки проблемы выяснилось, что (из-за версии SDK) процесс сборки устанавливал для $ (LatestTargetPlatformVersion) значение 10.0.10586. В то время как установленный WDK предоставляет необходимые версии файлов сборки только для версии 10.0.14393. Похоже, это несколько преднамеренное поведение.
Мое дело
В моем случае это произошло из-за разных версий Win SDK и WDK . У меня были SDK 10.0.10586 и WDK 10.0.14393. Установка SDK 10.0.14393 решила проблему для меня.
Дополнительное примечание
Win SDK устанавливается с макетом по умолчанию VS2015, но по какой-то причине он не получает обновлений в процессе обновлений VS.
Существует макрос $ (DDK_INC_PATH), который можно добавить для включения каталогов вашего проекта (свойства vcxproj -> Каталоги VC ++ -> Включить каталоги)
Если вы пытаетесь создать новую систему, возможно, сначала попробуйте перенацелить решение на эту систему.
Если это не сработает, найдите подпапку KM, упомянутую в некоторых из приведенных выше объяснений, а затем попробуйте перенацелить на эту версию, изменив $ (LatestTargetPlatformVersion)
Надеюсь, тогда у вас появится возможность строить с файлом ntddk.h NB! Имейте в виду, что это приведет к тому, что ваше решение будет построено на этой конкретной платформе, и если вы попытаетесь построить на другой платформе, вам придется вручную изменить ее снова. Лучшим решением было бы сделать какой-то шаг перед сборкой, который позаботится об отсутствии SDK и установит его, однако у меня нет такого решения - любого?
Я пытаюсь попасть в разработку драйверов (очередь "не делай этого") Я смотрел на эту страницу msdn и после установки WDK (Windows Driver Kit) 10 я все еще не могу скомпилировать пример, который они используют на этой странице.
Я просмотрел другие вопросы SO, но не смог найти установленный каталог WDK. Когда я пытаюсь запустить установку, меня встречает это:
Как я могу решить эту проблему?
Я новичок в Qt. Скачал исходный код для Qt приложения SourceForge и попытался построить и запустить его. Проработав несколько подобных проблем, добавив QT += операторов в .pro файла, я застрял на этом: При попытке построить в Qt Creator я получаю ошибки, говорящие ошибка: C1083: не удается открыть.
Вам нужно добавить путь заголовков WDK на ваш с расширением vcxproj каталоги включения:
свойства vcxproj - > C/C++ -> общие - > дополнительные каталоги включения
P.S. : убедитесь, что вы устанавливаете SDK 10 вместе с WDK 10.
P.P.S: без SDK вы получите ошибку Cannot open include file: 'ntdef.h'
Эмпирическое правило
Если вам нужно выполнить сборку с последней (или конкретной) версией WDK, убедитесь, что установлена соответствующая версия Win SDK.
Предполагаемой причиной
В процессе отладки проблемы оказалось, что(из-за версии SDK) процесс сборки устанавливал $(LatestTargetPlatformVersion) на 10.0.10586. В то время как установленный WDK предоставляет необходимые версии файлов сборки только для версии 10.0.14393. Похоже, это несколько преднамеренное поведение.
Моем случае
В моем случае это было связано с разными версиями Win SDK и WDK . У меня было SDK 10.0.10586 и WDK 10.0.14393. Установка SDK 10.0.14393 решила эту проблему для меня.
Примечание
Win SDK устанавливается с макетом по умолчанию VS2015, но по какой-то причине он не получает обновлений в процессе обновления VS.
Решил его, выбрав другой "Windows SDK Version" в Visual Studio в разделе свойства проекта - > общие.
В каталоге C:\Program Files (x86)\Windows Kits\10\Include у меня есть 5 папок с Windows SDKs. Самая новая (10.0.17763.0) не имела подпапки km . После изменения версии Windows SDK с 10.0.17763.0 на 10.0.17134.0 в Visual Studio был найден заголовок ntddk.h .
До публикации прочитал [ невозможно открыть включаемый файл "d3dx9.h" ] и [ невозможно открыть включаемый файл "d3dx9.h" ], но никто не работал. Моя ошибка компиляции: Не удается открыть включаемый файл: 'd3dx9.h': такого файла или каталога нет У меня есть d3dx9.h в каталоге.
Существует macros $(DDK_INC_PATH), который может быть добавлен в каталоги включения вашего проекта (свойства vcxproj - > каталоги VC++ - > каталоги включения)
Я тоже столкнулся с подобной проблемой. Ниже работало на меня:
Шаг 1: осознайте целевую платформу Windows, для которой вы собираетесь разрабатывать драйвер. Вы можете проверить 'Windows Version' в вашей системе, просмотрев Настройки - >Система - >о программе->спецификация Windows
Шаг 2: Убедитесь, что вы установили совместимые "Windows SDK" и "WinSDK", соответствующие целевой версии платформы windows.
Шаг 3: убедитесь, что "ntddk.h" существует в $(DDK_INC_PATH). Этот макрос препроцессора обычно вычисляется как "C:\Program Files (x86)\Windows Kits\10\Include\\km". Если вы не видите папку 'km', то внимательно следуйте ссылкам, упомянутым в шаге 2 выше.
Шаг 4: Проверьте, что свойства проекта -> свойства конфигурации - > общие - > набор инструментов платформы использует "WindowsKernelModeDriver" .
Если вы пытаетесь построить новую систему, то, возможно, сначала попробуйте перенастроить решение для этой системы
Если это не сработает, то найдите подпапку KM-упомянутую в некоторых из приведенных выше объяснений, а затем попробуйте перенацелиться на эту версию, изменив $(LatestTargetPlatformVersion)
Надеюсь, тогда вы сможете строить с помощью файла ntddk.h NB! Имейте в виду, что это заставит ваше решение строить на этой конкретной платформе, и если вы попытаетесь построить на другой, то вам придется вручную изменить его снова. Лучшим решением было бы сделать какой-то шаг предварительной сборки, который позаботится о недостающем SDK и установит его, однако у меня нет такого решения - ни одного ?
Похожие вопросы:
фатальная ошибка C1083: не удается открыть включаемый файл: 'pcap.h': такого файла или каталога нет. Как добавить файл .pcap.h ? Я делаю проект VC++ в 32-битном windows 7
Я новичок в VS2010 и пытался скомпилировать проект, когда-либо работавший в VS2008. Ошибка выглядит просто: stdafx.h(43): фатальная ошибка C1083: не удается открыть включаемый файл: 'afxwin.h': нет.
Я получаю эту ошибку, когда пытаюсь построить свой драйвер: Driver.cpp(7): фатальная ошибка C1083: не удается открыть включаемый файл: 'ntddk.h': нет такого файла или каталога Я использую Visual.
Я новичок в Qt. Скачал исходный код для Qt приложения SourceForge и попытался построить и запустить его. Проработав несколько подобных проблем, добавив QT += операторов в .pro файла, я застрял на.
До публикации прочитал [ невозможно открыть включаемый файл "d3dx9.h" ] и [ невозможно открыть включаемый файл "d3dx9.h" ], но никто не работал. Моя ошибка компиляции: Не удается.
Я только что скачал Visual Studio 2017 и преобразовал свой диалоговый проект C++/MFC с ним (из Visual Studio 2008 SP1.), но затем, когда я перехожу к Resources , он показывает эту ошибку: фатальная.
Детали системы:
Windows 10
Visual Studio Community 2017 v.15.2 (26430.6)
— Установленная разработка рабочего стола с C ++ (Снимок экрана: Список установки )
Шаг 1: Я написал знаменитую программу Hello World на C ++.
Шаг 2: Я нажал на Построить> Построить решение.
Проблема: ‘Stdio.h’: Данный файл или каталог отсутствует. Полная ошибка:
Детали по устранению неполадок / Вещи, которые я пробовал:
- Свойства конфигурации> Каталоги VC ++
Include Directories $(VC_IncludePath);$(WindowsSDK_IncludePath); - Снимок экрана: Solution Explorer (файлы в проекте)
Код в stdafx.cpp файл:
Код в stdafx.h файл:
Решение
Возникла та же проблема с переносом проекта с VS2013 на VS2017,
Исправлено: измените «Свойства-> Общие-> Версия Windows SDK» на 10
Другие решения
Столкнулся с проблемой пропавших без вести stdlib.h а также stdio.h (а может и больше) после установки VS2017 Community на новый компьютер и переноса решения с VS2013 на VS2017.
Сейчас мои проекты строятся без проблем.
Обратите внимание, что вам может потребоваться сделать проект стартовым проектом для ретаргетинга.
Есть три способа решить эту проблему.
Переустановите Visual Studio
Это также сработало для меня, потому что я понял, что, возможно, что-то не так с моим Windows SDK. Я использовал Windows 10, но с Windows SDK 8.1. У вас может быть и эта проблема.
шаги: Откройте установщик Visual Studio> щелкните трехстрочную строку меню> Удалить> Перезагрузите компьютер> Откройте установщик Visual Studio> Установите то, что вам нужно, но убедитесь, что вы устанавливаете только последнюю версию Windows SDK 10, а не несколько или 8.1.
У меня была похожая проблема после обновления моего VS2017. Проект построен хорошо; но много «ошибок», когда код был поднят в редакторе. Даже попробовал переустановить VS. Я смог решить эту проблему, установив для параметра «Игнорировать стандартные пути включения» значение «Да». Попытка построить решение с большим количеством ошибок. Вернулся и установил опцию на Нет. После восстановления моя проблема ушла.
Если вы не хотите использовать Windows SDK для Windows 10 (например, вы можете работать над проектом с открытым исходным кодом, решение которого не принимается вами), вы можете решить эту проблему в проекте Windows SDK 8.1 с помощью навигационный Tools -> Get Tools and Features. -> Individual Compontents tab и установка отдельных компонентов «Windows 8.1 SDK» (в составе SDK, библиотек и сред) и «Windows Universal CRT SDK» (в разделе «Компиляторы», средства сборки и среды выполнения):
У меня была такая же проблема при создании VS 2013 Project с помощью Visual Studio 2017 IDE.
Решением было установить правильный «Platformtoolset v120 (Visual Studio 2013)». Для этого должен быть установлен Windows SDK 8.1.
Если вы хотите использовать Platformtoolset v141 (Visual Studio 2017), необходимо установить Windows SDK 10.
Platformtoolset может быть выбран в диалоге свойств проекта: General -> Platformtoolset
526 просмотра
1 ответ
103 Репутация автора
Я пытаюсь использовать графическую библиотеку (SFML) для C ++, и у меня возникли проблемы. Я использую Visual Studio 2017. Я посмотрел много уроков на Youtube и получаю ту же ошибку с каждым, что пытаюсь. Я не могу найти решение, так как люди говорят «папки должны быть вместе», что я уже сделал: Вот ошибки, которые я получаю:
E1696 не может открыть исходный файл "stdafx.h" c: Users George source repos Game Game main.cpp 1
E1696 не может открыть исходный файл "SFML / Graphics.hpp" c: Users George source repos Game Game main.cpp 2
Код, который я запускаю (скопированный, с дополнительным):
Раньше в коде не было stdafx.h или std пространства имен, поэтому мне пришлось добавить их, потому что у меня были другие ошибки. Я был бы очень признателен за любую помощь. Спасибо
Ответы (1)
103 Репутация автора
Разобрался несколько дней назад, но забыл опубликовать, как я это исправил. Я скачал 32-битную версию SFML. В свойствах необходимо убедиться, что в нем написано: «Active (win32)» или что-то в этом роде. У меня был мой на "x64", поэтому он не работал. Надеюсь, что это помогло кому-то еще с той же проблемой 🙂
Я пытаюсь использовать графическую библиотеку (SFML) для C ++, и у меня возникли проблемы. Я использую Visual Studio 2017 Я наблюдал много учебников Youtube, и получить ту же ошибку с каждым я стараюсь. Я не могу найти решение, как люди говорят «папки должны быть вместе» , которые я уже сделал: Вот ошибки я получаю:
E1696 не может открыть исходный файл stdafx.h C: Users George источник Repos Game Game main.cpp 1
E0065 ожидается «;» C: Users George источник Repos Game Game main.cpp 5
E1696 исходный файл не может открыть SFML / Graphics.hpp C: Users George источник Repos Game Game main.cpp 2
Код я бег (скопировано с дополнительным):
Перед тем, код не имеют stdafx.h или патезрасе, так что я должен был добавить их, потому что у меня были другие ошибки. Я бы очень признателен за любую помощь. благодаря
Читайте также: