다음을 통해 공유


심각한 오류 C1083

filetype 파일을 열 수 없습니다. 'file': message

컴파일러는 파일을 찾을 수 없을 때 C1083 오류를 생성합니다. 이 오류의 원인에는 여러 가지가 있습니다. 잘못된 포함 검색 경로 또는 누락되거나 잘못된 헤더 파일이 가장 일반적인 원인이지만 다른 파일 형식 및 문제로 인해 C1083이 발생할 수도 있습니다. 컴파일러에서 이 오류를 생성하는 일반적인 이유 중 일부는 다음과 같습니다.

지정한 파일 이름이 잘못됨

파일 이름이 잘못 입력되었을 수 있습니다. 예를 들면 다음과 같습니다.

#include <algorithm.h>

원하는 파일을 찾을 수 없습니다. 대부분의 C++ 표준 라이브러리 헤더 파일에는 파일 이름 확장명이 .h 없습니다. 이 #include 지시문은 헤더를 <algorithm> 찾을 수 없습니다. 이 문제를 해결하려면 다음과 같이 올바른 파일 이름이 입력되었는지 확인합니다.

#include <algorithm>

특정 C 런타임 라이브러리 헤더는 표준 포함 디렉터리의 하위 디렉터리에 있습니다. 예를 들어 포함 sys/types.h하려면 지시문에 sys 하위 디렉터리 이름을 #include 포함해야 합니다.

#include <sys/types.h>

파일이 포함 검색 경로에 포함되지 않음

컴파일러는 또는 #import 지시문에 대한 #include 검색 규칙을 사용하여 파일을 찾을 수 없습니다. 예를 들어 헤더 파일 이름이 따옴표로 묶인 경우

#include "myincludefile.h"

이렇게 하면 컴파일러가 먼저 원본 파일이 포함된 동일한 디렉터리에서 파일을 찾은 다음 빌드 환경에서 지정한 다른 위치를 찾도록 지시합니다. 따옴표에 절대 경로가 포함되어 있는 경우 컴파일러는 해당 위치에서만 파일을 찾습니다. 따옴표에 상대 경로가 포함되어 있는 경우 컴파일러는 소스 디렉터리에 관련된 디렉터리에서 파일을 찾습니다.

이름이 꺾쇠 괄호로 묶인 경우

#include <stdio.h>

컴파일러는 빌드 환경, 컴파일러 옵션, /I 컴파일러 옵션 /XINCLUDE 환경 변수에 의해 정의된 검색 경로를 따릅니다. 파일을 찾는 데 사용되는 검색 순서에 대한 특정 세부 정보를 포함하여 자세한 내용은 #include 지시문(C/C++)#import 지시문을 참조하세요.

포함 파일이 원본 디렉터리를 기준으로 다른 디렉터리에 있고 include 지시문에서 상대 경로를 사용하는 경우 꺾쇠 괄호 대신 큰따옴표를 사용해야 합니다. 예를 들어 헤더 파일이 myheader.h 헤더라는 프로젝트 원본의 하위 디렉터리에 있는 경우 이 예제에서는 파일을 찾지 못하고 C1083을 발생합니다.

#include <headers\myheader.h>

그러나 이 예제는 다음과 같이 작동합니다.

#include "headers\myheader.h"

상대 경로는 포함 검색 경로의 디렉터리에서도 사용할 수 있습니다. 디렉터리를 INCLUDE 환경 변수 또는 Visual Studio의 Include 디렉터리 경로에 추가하는 경우 include 지시문에 경로의 일부를 추가하지 마세요. 예를 들어 헤더가 있는 경우 Visual Studio의 \path\example\headers\myheader.h포함 디렉터리 경로에 추가 \path\example\headers\ 하지만 #include 지시문은 파일을 로 참조합니다.

#include <headers\myheader.h>

파일을 찾을 수 없습니다. 포함 검색 경로에 지정된 디렉터리를 기준으로 올바른 경로를 사용합니다. 이 예제에서는 포함 검색 경로를 지시문에서 #include 경로 세그먼트로 \path\example\headers\ 변경하거나 제거할 수 있습니다.

타사 라이브러리 문제 및 vcpkg

빌드의 일부로 타사 라이브러리를 구성하려고 할 때 이 오류가 표시되는 경우 C++ 패키지 관리자인 vcpkg를 사용하여 라이브러리를 설치하고 빌드하는 것이 좋습니다. vcpkg는 점점 늘어나는 대규모 타사 라이브러리 목록을 지원하고 프로젝트의 일부로 성공적인 빌드에 필요한 모든 구성 속성 및 종속성을 설정합니다.

파일이 프로젝트에 있지만 포함 검색 경로는 아닙니다.

헤더 파일이 프로젝트의 일부로 솔루션 탐색기 나열되는 경우에도 파일은 소스 파일의 지시문 또는 #import 지시문에 의해 #include 참조되고 포함 검색 경로에 있는 경우에만 컴파일러에서 찾을 수 있습니다. 빌드 종류에 따라 다른 검색 경로가 사용될 수도 있습니다. /X 컴파일러 옵션을 사용하여 포함 검색 경로에서 디렉터리를 제외할 수 있습니다. 이렇게 하면 각 빌드에서 이름은 같지만 다른 디렉터리에 보관되는 다른 포함 파일을 사용할 수 있습니다. 이는 전처리기 명령을 통한 조건부 컴파일의 대체 방법입니다. 컴파일러 옵션에 /X 대한 자세한 내용은 (표준 포함 경로 무시)를 참조 /X 하세요.

이 문제를 해결하려면 컴파일러가 포함되거나 가져온 파일을 찾는 데 사용하는 경로를 수정합니다. 새 프로젝트는 기본 포함 검색 경로를 사용합니다. 프로젝트에 대한 디렉터리를 추가하려면 포함 검색 경로를 수정해야 할 수 있습니다. 명령줄에서 컴파일하는 경우 INCLUDE 환경 변수의 경로 또는 /I 컴파일러 옵션을 추가하여 파일 경로를 지정합니다.

Visual Studio에서 포함 디렉터리 경로를 설정하려면 프로젝트의 속성 페이지 대화 상자를 엽니다. 왼쪽 창의 구성 속성 아래에서 VC++ 디렉터리를 선택한 다음 디렉터리 포함 속성을 편집합니다. 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 하세요.

  • 이 파일은 헤더를 미리 컴파일하는 데 사용되는 것과 다른 /analyze 컴파일러 옵션 설정을 사용하여 컴파일됩니다. 프로젝트의 헤더가 미리 컴파일되면 모두 동일한 /analyze 설정을 사용해야 합니다. 자세한 내용은 (코드 분석)을 참조 /analyze 하세요.

  • 파일 또는 디렉터리가 Linux용 Windows 하위 시스템 의해 만들어졌으며 디렉터리별 대/소문자 구분이 사용되며 지정된 경로 또는 파일의 사례가 디스크에 있는 경로 또는 파일의 대/소문자와 일치하지 않습니다.

  • 파일, 디렉터리 또는 디스크가 읽기 전용입니다.

  • Visual Studio 또는 명령줄 도구에는 파일 또는 디렉터리를 읽을 수 있는 충분한 권한이 없습니다. 예를 들어 프로젝트 파일의 소유권이 Visual Studio 또는 명령줄 도구를 실행하는 프로세스와 다른 경우에 발생할 수 있습니다. 경우에 따라 Visual Studio 또는 개발자 명령 프롬프트를 관리자로 실행하여 이 문제를 해결할 수 있습니다.

  • 파일 핸들이 충분하지 않습니다. 일부 애플리케이션을 닫은 후 다시 컴파일하십시오. 이러한 경우는 일반적인 상황에서 거의 발생하지 않습니다. 하지만 실제 메모리가 제한된 컴퓨터에서 큰 프로젝트를 빌드하는 경우 발생할 수 있습니다.

예시

다음 예제에서는 원본 디렉터리 또는 포함 검색 경로에 헤더 파일이 "test.h" 없을 때 C1083 오류를 생성합니다.

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

IDE 또는 명령줄에서 C/C++ 프로젝트를 빌드하는 방법 및 환경 변수 설정에 대한 자세한 내용은 프로젝트 및 빌드 시스템을 참조 하세요.

참고 항목