Поделиться через


Неустранимая ошибка C1083

Не удается открыть файл filetype : "file" : message

Компилятор создает ошибку C1083, когда не удается найти файл. Существует множество возможных причин этой ошибки. Неправильное включение пути поиска или отсутствующих или неправильных файлов заголовков являются наиболее распространенными причинами, но другие типы файлов и проблемы также могут вызвать C1083. Ниже приведены некоторые распространенные причины, по которым компилятор создает эту ошибку.

Указано неверное имя файла

Имя файла может быть неправильно введено. Например,

#include <algorithm.h>

может не найти файл, который вы хотели. Большинство файлов заголовков стандартной .h библиотеки C++ не имеют расширения имени файла. Эта #include директива не найдет <algorithm> заголовок. Чтобы устранить эту проблему, убедитесь, что введено правильное имя файла, как показано ниже.

#include <algorithm>

Некоторые заголовки библиотеки времени выполнения C расположены в подкаталоге стандартного каталога включения. Например, чтобы включить sys/types.h, необходимо включить sys имя подкаталога в директиву #include :

#include <sys/types.h>

Файл не включен в путь поиска включения

Компилятор не может найти файл с помощью правил поиска для #include директивы или #import директивы. Например, если имя файла заголовка заключено кавычками,

#include "myincludefile.h"

Это указывает компилятору искать файл в том же каталоге, который содержит исходный файл, а затем сначала искать в других расположениях, указанных средой сборки. Если кавычки содержат абсолютный путь, компилятор выполняет поиск файла только в этом расположении. Если кавычки содержат относительный путь, компилятор выполняет поиск файла в каталоге относительно исходного каталога.

Если имя заключено в угловые скобки,

#include <stdio.h>

Компилятор следует пути поиска, определяемого средой сборки, параметром компилятора, /I /X параметром компилятора и переменной среды INCLUDE . Дополнительные сведения, включая конкретные сведения о порядке поиска, используемом для поиска файла, см . в директиве #include (C/C++) и директиве #import.

Если включаемые файлы находятся в другом каталоге относительно исходного каталога, и вы используете относительный путь в директивах включения, необходимо использовать двойные кавычки вместо угловых квадратных скобок. Например, если файл myheader.h заголовка находится в подкаталоге именованных заголовков источников проекта, этот пример не сможет найти файл и вызывает C1083:

#include <headers\myheader.h>

но в этом примере работает следующее:

#include "headers\myheader.h"

Относительные пути также можно использовать с каталогами в пути поиска включаемого. Если вы добавляете каталог в переменную среды INCLUDE или в путь "Включить каталоги " в Visual Studio, не добавляйте часть пути к директивам include. Например, если заголовок находится \path\example\headers\myheader.hв папке , и вы добавляете \path\example\headers\ в путь включения каталогов в Visual Studio, но директива #include ссылается на файл как

#include <headers\myheader.h>

Затем файл не найден. Используйте правильный путь относительно каталога, указанного в пути поиска включения. В этом примере можно изменить путь поиска на или \path\example\удалить headers\ сегмент пути из директивы #include .

Проблемы со сторонними библиотеками и vcpkg

Если эта ошибка возникает при попытке настроить стороннюю библиотеку в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущий список сторонних библиотек и задает все свойства конфигурации и зависимости, необходимые для успешных сборок в рамках проекта.

Файл находится в проекте, но не включает путь поиска.

Даже если файлы заголовков перечислены в Обозреватель решений в рамках проекта, файлы находятся только компилятором, когда они ссылаются #include на исходный файл или #import директиву, и находятся в пути к включению поиска. Для различных типов построений могут использоваться разные пути поиска. Параметр /X компилятора можно использовать для исключения каталогов из пути поиска включения. Это позволяет использовать для разных построений разные файлы include, которые имеют одно имя, но расположены в разных каталогах. Таким образом создается альтернатива условной компиляции с помощью команд препроцессора. Дополнительные сведения о параметре компилятора см. в разделе /X (Игнорировать стандартные /X пути включения).

Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. Новый проект использует пути поиска по умолчанию. Возможно, потребуется изменить путь поиска включения, чтобы добавить каталог для проекта. Если вы компилируетсяе в командной строке, добавьте путь к переменной среды INCLUDE или /I параметр компилятора, чтобы указать путь к файлу.

Чтобы задать путь к каталогу include в Visual Studio, откройте диалоговое окно "Страницы свойств проекта". Выберите каталоги VC++ в разделе "Свойства конфигурации" в левой области, а затем измените свойство Include Directoryies. Дополнительные сведения о каталогах для каждого пользователя и каждого проекта, поисках компилятором в Visual Studio, см . на странице свойств каталогов VC++. Дополнительные сведения о параметре компилятора /I см. в разделе /I (Дополнительные каталоги включения).

Среда INCLUDE или LIB командной строки не задана

Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный переменной среды INCLUDE или LIB , не задан правильно, можно создать ошибку C1083. Настоятельно рекомендуется использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок командной строки. Дополнительные сведения см. в разделе "Сборка C/C++ в командной строке". Дополнительные сведения об использовании переменных среды см. в статье "Практическое руководство. Использование переменных среды в сборке".

Файл может быть заблокирован или использоваться

Если вы используете другую программу для редактирования или доступа к файлу, возможно, файл заблокирован. Попробуйте закрыть файл в другой программе. Иногда другая программа может быть самой Visual Studio, если вы используете параметры параллельной компиляции. Если параметр параллельной сборки отключает ошибку, это проблема. Другие параллельные системы сборки также могут иметь эту проблему. Будьте осторожны, чтобы задать зависимости файлов и проектов, чтобы порядок сборки был правильным. В некоторых случаях рекомендуется создать промежуточный проект для принудительного построения порядка зависимостей для общего файла, который может быть создан несколькими проектами. Иногда антивирусная программа временно блокирует недавно измененные файлы для сканирования. Если это возможно, попробуйте исключить каталоги сборки проекта из антивирусного сканера.

Включена неправильная версия имени файла

Ошибка C1083 также может указывать на включение неверной версии файла. Например, сборка может включать неправильную версию файла с директивой #include для файла заголовка, который не предназначен для этой сборки. Например, некоторые файлы могут применяться только к сборкам x86 или к сборкам отладки. Если файл заголовка не найден, компилятор создает ошибку C1083. Для исправления этой проблемы необходимо использовать правильный файл, а не добавлять в построение файл заголовка или каталог.

Предварительно скомпилированные заголовки еще не компилированы

При настройке проекта использовать предварительно скомпилированные заголовки необходимо создать соответствующие .pch файлы, чтобы файлы, использующие содержимое заголовка, можно скомпилировать. Например, pch.cpp файл (stdafx.cpp в Visual Studio 2017 и более ранних версиях) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичной структуре процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе "Создание предварительно скомпилированных файлов заголовков".

Другие причины

  • Вы установили пакет SDK или стороннюю библиотеку, но не открыли новую командную строку разработчика. Если пакет SDK или библиотека добавляют файлы в путь INCLUDE , может потребоваться открыть новое окно командной строки разработчика, чтобы получить эти изменения переменной среды.

  • Файл использует управляемый код, но параметр /clr компилятора не указан. Дополнительные сведения см. в разделе /clr (Компиляция среды CLR).

  • Файл компилируется с помощью другого /analyze параметра параметра компилятора, отличного от используемого для предварительной компиляции заголовков. Когда заголовки проекта предварительно компилируются, все должны использовать одни и те же /analyze параметры. Дополнительные сведения см. в разделе /analyze "Анализ кода".

  • Файл или каталог был создан подсистема Windows для Linux, конфиденциальность регистра для каждого каталога включена, и указанный случай пути или файла не соответствует варианту пути или файла на диске.

  • Файл, каталог или диск доступен только для чтения.

  • Visual Studio или средства командной строки не имеют достаточных разрешений для чтения файла или каталога. Это может произойти, например, если файлы проекта имеют другое право владения, чем процесс, выполняемый Visual Studio или средства командной строки. Иногда эту проблему можно устранить, выполнив Visual Studio или командную строку разработчика от имени администратора.

  • Недостаточно дескрипторов файлов. Закройте часть приложений и повторите компиляцию. Эта ситуация маловероятна в обычных условиях. Однако она может возникать при построении крупных проектов на компьютере с ограниченной физической памятью.

Пример

В следующем примере возникает ошибка C1083, если файл "test.h" заголовка не существует в исходном каталоге или в пути к включению поиска.

// C1083.cpp
// compile with: /c
#include "test.h"   // C1083 test.h doesn't exist
#include "stdio.h"  // OK

Сведения о создании проектов C/C++ в интегрированной среде разработки или командной строке, а также о настройке переменных среды см. в разделе "Проекты" и "Системы сборки".

См. также