링커 도구 오류 LNK1104
'filename' 파일을 열 수 없습니다.
이 오류는 링커가 읽기용 또는 쓰기용으로 파일을 열지 못할 때 보고됩니다. 문제의 가장 일반적인 두 가지 원인은 다음과 같습니다.
프로그램이 이미 실행 중이거나 디버거에 로드되고 있습니다.
라이브러리 경로가 올바르지 않거나 큰따옴표로 묶이지 않습니다.
이 오류의 다른 가능한 원인은 여러 가지가 있습니다. 범위를 좁히려면 먼저 파일 이름의 종류를 확인합니다. 그런 다음, 다음 섹션을 사용하여 특정 문제를 식별하고 해결합니다.
앱 또는 해당 .pdb 파일을 열 수 없음
앱이 실행 중이거나 디버거에 로드됨
파일 이름이 실행 파일의 이름 또는 연결된 .pdb 파일인 경우 애플리케이션이 이미 실행 중인지 확인합니다. 그런 다음 디버거에 로드되는지 확인합니다. 이 문제를 해결하려면 프로그램을 중지하고 다시 빌드하기 전에 디버거에서 언로드합니다. 앱이 리소스 편집기 같은 다른 프로그램에서 열려 있는 경우 닫습니다. 프로그램이 응답하지 않는 경우 작업 관리자를 사용하여 프로세스를 종료해야 할 수 있습니다. Visual Studio를 닫고 다시 시작해야 할 수도 있습니다.
앱이 바이러스 백신 검사에 의해 잠겨 있습니다.
바이러스 백신 프로그램은 새로 만든 파일, 특히 .exe 및 .dll 실행 파일에 대한 액세스를 일시적으로 차단합니다. 이 문제를 해결하려면 바이러스 백신 스캐너에서 프로젝트 빌드 디렉터리를 제외해 보세요.
Microsoft 라이브러리 파일을 열 수 없음
Kernel32.lib와 같은 Windows 라이브러리
열 수 없는 파일이 Kernel32.lib와 같이 Microsoft에서 제공하는 표준 라이브러리 파일 중 하나인 경우 프로젝트 구성 오류 또는 설치 오류가 발생할 수 있습니다. Windows SDK가 설치되어 있는지 확인합니다. 프로젝트에 MFC와 같은 다른 Microsoft 라이브러리가 필요한 경우 Visual Studio 설치 관리자가 MFC 구성 요소도 설치했는지 확인합니다. 설치 관리자를 다시 실행하여 언제든지 선택적 구성 요소를 추가할 수 있습니다. 자세한 내용은 Visual Studio 수정을 참조하세요. 설치 관리자의 개별 구성 요소 탭을 사용하여 특정 라이브러리 및 SDK를 선택합니다.
버전이 지정된 vcruntime 라이브러리
오류 메시지에 msvcr120.lib와 같은 버전이 지정된 Microsoft 라이브러리가 있는 경우 해당 컴파일러 버전의 플랫폼 도구 집합이 설치되지 않을 수 있습니다. 이 문제를 해결하려면 현재 플랫폼 도구 집합을 사용하도록 프로젝트를 업그레이드하거나 이전 도구 집합을 설치하고 프로젝트를 변경하지 않고 빌드하는 두 가지 옵션이 있습니다. 자세한 내용은 이전 버전의 Visual C++에서 프로젝트 업그레이드 및 Visual Studio에서 네이티브 다중 대상 지정을 사용하여 이전 프로젝트를 빌드하는 방법을 참조하세요.
소매, 디버그 또는 플랫폼별 라이브러리
이 오류는 소매 또는 ARM64와 같은 새 대상 플랫폼 또는 구성을 처음 빌드할 때 발생할 수 있습니다. IDE에서 일반 속성 페이지에 지정된 플랫폼 도구 집합 및 Windows SDK 버전이 설치되어 있는지 확인합니다. 또한 VC++ 디렉터리 속성 페이지에 지정된 라이브러리 디렉터리에서 필요한 라이브러리를 사용할 수 있는지 확인합니다. 디버그, 소매, x86 또는 ARM64와 같은 각 구성의 속성을 확인합니다. 한 빌드가 작동하지만 다른 빌드가 작동하지 않는 경우 둘 다에 대한 설정을 비교합니다. 누락된 필수 도구 및 라이브러리를 설치합니다.
vccorlib.lib 라이브러리
UWP(유니버설 Windows) 앱 또는 구성 요소에 대한 스펙터 완화 라이브러리는 없습니다. 오류 메시지에 vccorlib.lib가 포함된 경우 UWP 프로젝트에서 사용하도록 설정 /Qspectre
했을 수 있습니다. /Qspectre
이 문제를 해결하려면 컴파일러 옵션을 사용하지 않도록 설정합니다. Visual Studio에서 Spectre 완화 속성을 변경 합니다 . 프로젝트 속성 페이지 대화 상자의 C/C++>코드 생성 페이지에 있습니다.
온라인 또는 기타 원본의 프로젝트의 라이브러리
다른 컴퓨터에서 복사한 프로젝트를 빌드하는 경우 라이브러리 설치 위치가 다를 수 있습니다. 명령줄 빌드의 경우 LIB 환경 변수 및 라이브러리 경로가 빌드에 대해 올바르게 설정되었는지 확인합니다. Visual Studio에서는 프로젝트의 속성 페이지에 설정된 현재 라이브러리 경로를 보고 편집할 수 있습니다. VC++ 디렉터리 페이지에서 라이브러리 디렉터리 속성에 대한 드롭다운 컨트롤을 선택한 다음 편집을 선택합니다. 라이브러리 디렉터리 대화 상자의 평가 값 섹션에는 라이브러리 파일을 검색한 현재 경로가 나열됩니다. 로컬 라이브러리를 가리키도록 이러한 경로를 업데이트합니다.
업데이트된 Windows SDK 라이브러리
이 오류는 Windows SDK에 대한 Visual Studio 경로가 만료된 경우에 발생할 수 있습니다. Visual Studio 설치 관리자와 독립적으로 최신 Windows SDK를 설치하는 경우 발생할 수 있습니다. IDE에서 문제를 해결하려면 VC++ 디렉터리 속성 페이지에 지정된 경로를 업데이트합니다. 경로의 버전을 새 SDK와 일치하도록 설정합니다. 개발자 명령 프롬프트를 사용하는 경우 환경 변수를 초기화하는 일괄 처리 파일을 새 SDK 경로로 업데이트합니다. Visual Studio 설치 관리자를 사용하여 업데이트된 SDK를 설치하여 이 문제를 방지할 수 있습니다.
타사 라이브러리 파일을 열 수 없음
이 문제에는 다음과 같은 몇 가지 일반적인 원인이 있습니다.
라이브러리 파일의 경로가 올바르지 않거나 큰따옴표로 묶지 않을 수 있습니다. 또는 링커에 지정하지 않았을 수 있습니다.
32비트 버전의 라이브러리를 설치했을 수도 있지만 64비트 또는 그 반대로 빌드하고 있습니다.
라이브러리에 설치되지 않은 다른 라이브러리에 대한 종속성이 있을 수 있습니다.
명령줄 빌드에 대한 경로 문제를 해결하려면 LIB 환경 변수가 설정되어 있는지 확인합니다. 사용하는 모든 라이브러리 및 빌드하는 모든 구성에 대한 경로가 포함되어 있는지 확인합니다. IDE에서 라이브러리 경로는 VC++ 디렉터리>라이브러리 디렉터리 속성에 의해 설정됩니다. 빌드하는 모든 구성에 필요한 라이브러리가 포함된 모든 디렉터리에 나열되어 있는지 확인합니다.
표준 라이브러리 디렉터리를 재정의하는 라이브러리 디렉터리를 제공해야 할 수도 있습니다. 명령줄에서 이 옵션을 사용합니다 /LIBPATH
. IDE에서 프로젝트의 구성 속성 > 링커 > 일반 속성 페이지에서 추가 라이브러리 디렉터리 속성을 사용합니다.
빌드하는 구성에 필요한 모든 버전의 라이브러리를 설치해야 합니다. vcpkg 패키지 관리 유틸리티를 사용하여 많은 일반 라이브러리에 대한 설치 및 설정을 자동화하는 것이 좋습니다. 가능하면 타사 라이브러리의 복사본을 직접 빌드하는 것이 가장 좋습니다. 그런 다음 프로젝트와 동일한 구성을 위해 빌드된 모든 라이브러리의 로컬 종속성이 있어야 합니다.
프로젝트에서 빌드한 파일을 열 수 없음
링커가 액세스하려고 할 때 파일 이름이 아직 없는 경우 이 오류가 표시될 수 있습니다. 한 프로젝트가 솔루션의 다른 프로젝트에 의존하지만 프로젝트가 잘못된 순서로 빌드되는 경우 발생할 수 있습니다. 이 문제를 해결하려면 파일을 사용하는 프로젝트에서 프로젝트 참조가 설정되어 있는지 확인합니다. 그런 다음 누락된 파일이 필요하기 전에 빌드됩니다. 자세한 내용은 Visual Studio C++ 프로젝트에서 참조 추가 및 프로젝트의 참조 관리를 참조하세요.
'C:\Program.obj' 파일을 열 수 없습니다.
오류 메시지에 파일 이름 C:\Program.obj 표시되면 라이브러리 경로를 큰따옴표로 래핑합니다. 이 오류는 C:\Program Files로 시작하는 래핑되지 않은 경로가 링커에 전달될 때 발생합니다. 래핑되지 않은 경로도 비슷한 오류를 일으킬 수 있습니다. 일반적으로 드라이브의 루트에 예기치 않은 .obj 파일이 표시됩니다.
명령줄 빌드에 대한 이 문제를 해결하려면 /LIBPATH 옵션 매개 변수를 확인합니다. 또한 LIB 환경 변수에 지정된 경로와 명령줄에 지정된 경로를 확인합니다. 공백을 포함하는 모든 경로 주위에 큰따옴표를 사용해야 합니다.
IDE에서 이 문제를 해결하려면 필요에 따라 프로젝트에 대한 다음 속성에 큰따옴표를 추가합니다.
구성 속성 > VC++ 디렉터리 속성 페이지의 라이브러리 디렉터리 속성
구성 속성 > 링커 일반 속성 페이지의 추가 라이브러리 디렉터리 > 속성
구성 속성 > 링커 > 입력 속성 페이지의 추가 종속성 속성입니다.
기타 일반적인 문제
경로 또는 파일 이름 문제
이 오류는 링커에 지정된 라이브러리 파일 이름 또는 경로가 올바르지 않은 경우에 발생할 수 있습니다. 또는 경로에 잘못된 드라이브 사양이 있는 경우 명령줄 또는 #pragma comment(lib, "library_name" ) 지시문에서 문제를 확인합니다. 맞춤법 및 파일 확장자를 확인하고 지정된 위치에 파일이 있는지 확인합니다.
병렬 빌드 동기화
병렬 빌드 옵션을 사용하는 경우 Visual Studio가 다른 스레드에서 파일을 잠갔을 수 있습니다. 이 문제를 해결하려면 동일한 코드 개체 또는 라이브러리가 여러 프로젝트에 빌드되지 않은지 확인합니다. 빌드 종속성 또는 프로젝트 참조를 사용하여 프로젝트에서 빌드된 이진 파일을 선택합니다.
IDE에 지정된 추가 종속성
추가 종속성 속성에서 개별 라이브러리를 직접 지정하는 경우 공백을 사용하여 라이브러리 이름을 구분합니다. 쉼표 또는 세미콜론을 사용하지 마세요. 편집 메뉴 항목을 사용하여 추가 종속성 대화 상자를 여는 경우 줄 바꿈을 사용하여 쉼표, 세미콜론 또는 공백이 아닌 이름을 구분합니다. 라이브러리 디렉터리 및 추가 라이브러리 디렉터리 대화 상자에서 라이브러리 경로를 지정할 때도 줄 바꿈을 사용합니다.
너무 긴 경로
파일 이름의 경로가 260자 이상으로 확장될 때 이 오류가 표시될 수 있습니다. 필요한 경우 디렉터리 구조를 다시 정렬하거나 폴더 및 파일 이름을 줄여 경로를 줄입니다.
너무 큰 파일
파일이 너무 커서 이 오류가 발생할 수 있습니다. 크기가 기가바이트보다 큰 라이브러리 또는 개체 파일은 32비트 링커에 문제가 발생할 수 있습니다. 이 문제에 대한 가능한 해결 방법은 64비트 도구 집합을 사용하는 것입니다. 명령줄에서 64비트 도구 집합을 사용하는 방법에 대한 자세한 내용은 방법: 명령줄에서 64비트 Visual C++ 도구 집합 사용 방법을 참조 하세요. IDE에서 64비트 도구 집합을 사용하는 방법에 대한 자세한 내용은 64비트 컴파일러 및 도구와 함께 MSBuild 사용을 참조 하세요. 또한 이 Stack Overflow 게시물: Visual Studio에서 네이티브 amd64 도구 체인을 사용하도록 만드는 방법도 참조하세요.
잘못된 파일 권한
파일 이름에 액세스할 수 있는 파일 권한이 부족한 경우 이 오류가 발생할 수 있습니다. 일반 사용자 계정을 사용하여 보호된 시스템 디렉터리의 라이브러리 파일에 액세스하는 경우 발생할 수 있습니다. 또는 원래 사용 권한이 설정된 다른 사용자로부터 복사한 파일을 사용하는 경우 이 문제를 해결하려면 파일을 쓰기 가능한 프로젝트 디렉터리로 이동합니다. 이동된 파일에 액세스할 수 없는 권한이 있는 경우 관리자 명령 창에서 takeown.exe 명령을 실행하여 파일의 소유권을 가져옵니다.
디스크 공간이 부족합니다.
디스크 공간이 부족하면 오류가 발생할 수 있습니다. 링커는 여러 사례에서 임시 파일을 사용합니다. 디스크 공간이 충분한 경우에도 큰 링크가 고갈되거나 사용 가능한 디스크 공간이 조각화될 수 있습니다. /OPT(최적화) 옵션을 사용하는 것이 좋습니다. 전이적 COMDAT 제거를 수행하면 모든 개체 파일을 여러 번 읽습니다.
TMP 환경 변수의 문제
파일 이름이 LNKnnn인 경우 임시 파일의 링커에서 생성한 파일 이름입니다. TMP 환경 변수에 지정된 디렉터리가 없을 수 있습니다. 또는 TMP 환경 변수에 대해 둘 이상의 디렉터리를 지정할 수 있습니다. TMP 환경 변수에 대해 하나의 디렉터리 경로만 지정해야 합니다.
도움말, 내 문제는 여기에 나열되지 않습니다!
여기에 나열된 문제가 적용되지 않는 경우 Visual Studio의 피드백 도구를 사용하여 도움을 받을 수 있습니다. IDE에서 메뉴 모음으로 이동하여 도움말 피드백 > 보내기 보고서 문제를 선택합니다>. 또는 도움말 > 보내기 피드백을 > 사용하여 제안서를 제출합니다. Microsoft Learn Q&A 사이트와 Visual Studio C++ 개발자 커뮤니티 웹 사이트를 사용할 수도 있습니다. 이러한 사이트를 사용하여 질문에 대한 답변을 검색하고 도움을 요청합니다. 자세한 내용은 Visual C++ 도구 집합 또는 설명서에서 문제를 보고하는 방법을 참조 하세요.
이 문서에 추가해야 하는 이 문제를 해결하는 새로운 방법을 발견한 경우 알려주세요. 이 페이지의 아래 단추를 사용하여 피드백을 보낼 수 있습니다. C++ 설명서 GitHub 리포지토리에서 새 문제를 만드는 데 사용합니다. 감사합니다.