Nice programing

Visual Studio : LINK : 치명적인 오류 LNK1181 : 입력 파일을 열 수 없습니다.

nicepro 2020. 10. 27. 23:18
반응형

Visual Studio : LINK : 치명적인 오류 LNK1181 : 입력 파일을 열 수 없습니다.


Visual Studio 2010에서 한동안 이상한 버그가 발생했습니다.

정적 라이브러리로 컴파일되는 프로젝트와 정말 간단하지만이 라이브러리에 의존하는 또 다른 프로젝트로 구성된 솔루션이 있습니다.

때로는 마지막 날에 솔루션을 다시 빌드하거나 1-3 개의 변경된 소스 파일로 컴파일 한 후 다음과 같은 오류가 발생합니다.

2>LINK : fatal error LNK1181: cannot open input file 'thelibrary.lib'
========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

thelibrary.lib오류나 경고없이 컴파일 이 성공한 .

나는 솔루션을 청소 해 보았지만 항상 작동하지는 않습니다.

  • 여기서 무엇이 잘못 되었습니까?

링커, 일반 추가 라이브러리 디렉토리에서 링커, 입력에 포함 된 .dll 또는 .libs에 디렉토리를 추가하십시오. 이것을 VC ++ 디렉토리, 라이브러리 디렉토리에 넣으면 작동하지 않습니다.


이동 :

Project properties -> Linker -> General -> Link Library Dependencies set No.

여기서는 단 하나의 일만 볼 수 있습니다. 프로젝트에서 library.lib에 대한 종속성을 올바르게 설정하지 않았습니다. 즉, library.lib가 잘못된 순서로 빌드되었음을 의미합니다 (또는 동시에 1 개 이상의 CPU 빌드 구성이있는 경우, 오류의 무작위성을 설명 할 수도 있습니다). (메뉴-> 프로젝트-> 프로젝트 종속성에서 프로젝트 종속성을 변경할 수 있습니다.)


최근에 같은 오류가 발생했습니다. 일부 파헤 치기는 이것을 가져 왔습니다 : http://support.microsoft.com/kb/815645

기본적으로 .lib 경로에 공백이 있으면 좋지 않습니다. 그것이 당신에게 일어나는 일인지 모르지만 합리적으로 가능해 보입니다.

수정은 1) lib 참조를 "따옴표"에 넣거나 2) 라이브러리 디렉토리에 lib의 경로를 추가하는 것입니다 (구성 속성 >> VC ++ 디렉토리).


VS 2010과 VS 2012에서 동일한 문제가 발생했습니다. 내 시스템에서 첫 번째 정적 라이브러리가 빌드 된 다음 기본 프로젝트가 빌드를 시작하면 즉시 삭제되었습니다.

문제는 여러 프로젝트의 공통 중간 폴더입니다. 각 프로젝트에 대해 별도의 중간 폴더를 지정하십시오.

여기 에 대해 자세히 알아보십시오.


프로젝트 자체의 일부인 파일에 LINK1181오류 발생 했다는 점에서 비슷한 문제가 발생했습니다 .OBJ(전체 프로젝트에는 2 개의 .cxx 파일 만 있음).

처음에는 .EXEVisual Studio에서 를 생성하도록 프로젝트를 설정 한 다음에서 Property Pages -> Configuration Properties -> General -> Project Defaults -> Configuration Type.EXE를 .DLL로 변경했습니다. 어떻게 든 Visual Studio 2008이 혼란스러워지는 것을 의심하면서 처음부터 .DLL 모드를 사용하여 전체 솔루션을 처음부터 다시 만들었습니다. 그 후 문제가 사라졌습니다. .vcproj 및 기타 관련 파일을 통해 수동으로 방법을 선택했다면 처음부터 시작하지 않고 문제를 해결하는 방법을 알아낼 수 있다고 생각합니다 (하지만 내 프로그램은 두 개의 .cpp 파일로 구성되어있어 다시 시작하는 것이 더 쉬웠습니다).


다음과 같이 해결했습니다.

보기-> 속성 페이지-> 구성 속성-> 링커-> 입력으로 이동합니다.

추가 종속성에서 thelibrary.lib를 추가하십시오. 인용문을 사용하지 마십시오.


나는 같은 문제에 걸려 넘어지고 있습니다. 나에게 그것은 같은 이름을 가진 두 개의 프로젝트가 다른 하나에 의존하여 발생하는 것 같습니다.

예를 들어, Foo.lib를 생성하는 Foo라는 프로젝트가 있습니다. 그런 다음 Foo.exe와 Foo.lib의 링크를 생성하는 Foo라는 또 다른 프로젝트가 있습니다.

프로세스 모니터를 사용하여 파일 활동을 봤습니다. 일어나는 것처럼 보이는 것은 Foo (lib)가 먼저 빌드된다는 것입니다 .Foo (exe)가 Foo (lib)에 따라 표시되기 때문에 적절합니다. 이 모든 것이 정상이며 성공적으로 빌드되며 $ (OutDir) $ (TargetName) $ (TargetExt) 출력 디렉터리에 배치됩니다. 그런 다음 Foo (exe)가 다시 작성되도록 트리거됩니다. 글쎄, 재건은 깨끗한 다음 빌드입니다. Foo.exe의 '깨끗한'단계가 출력 디렉토리에서 Foo.lib를 삭제하는 것 같습니다. 이것은 또한 출력 파일을 삭제하지 않는 후속 '빌드'가 작동하는 이유를 설명합니다.

VS의 버그라고 생각합니다.

불행히도 Rebuild와 관련하여 문제에 대한 해결책이 없습니다. 해결 방법은 수동으로 Clean을 실행 한 다음 Build를 실행하는 것입니다.


이유는 모르겠지만 링커-> 입력-> 추가 종속성 참조를 "dxguid.lib"에서 "C : \ Program Files (x86) \ Microsoft DirectX SDK (June 2010) \ Lib \ x86 \ dxguid로 변경합니다. lib "(제 경우에는) 만 작동했습니다.


나에게 문제는 잘못된 include디렉토리였습니다. 포함 디렉토리에 헤더 파일 만 포함되어 있기 때문에 이것이 겉보기에 누락 된 lib 오류를 일으키는 이유를 모르겠습니다. 그리고 라이브러리 디렉토리에 올바른 경로가 설정되었습니다.


하드웨어 문제가있을 수 있습니다.

2x 512MB RAM2x 1GB RAM으로 변경할 때까지 이전 시스템 (AMD 1800MHz CPU, 1GB RAM, Windows 7 Ultimate)에서 동일한 문제가 발생했습니다 . 그 이후로 문제가 없었습니다. 또한 다른 (사소한) 문제가 사라졌습니다. 2x 512MB + 1GB 또는 1x 512MB + 2x 1GB 도 제대로 작동하지 않았기 때문에 두 개의 512MB 모듈이 서로 그다지 좋아하지 않았다고 생각합니다.


DOS "8.3"형식으로 라이브러리 경로를 지정하여 경로 내 공백 문제를 수정할 수도 있습니다.

8.3 형식을 얻으려면 다음을 수행하십시오 (명령 줄에서).

DIR /AD /X

모든 수준의 디렉토리를 통해 재귀 적으로.


나는 같은 문제가 있었다. OBJECTS모든 링커 개체를 포함 하는 매크로 정의하여 해결했습니다 . 예 :

OBJECTS = target.exe kernel32.lib mylib.lib (etc)

그런 다음 $(OBJECTS)링커의 명령 줄에서 지정 합니다.

그래도 Visual Studio를 사용하지 않고 nmake와 .MAK 파일 만 사용 합니다.


긴 인수 목록을 사용하여 Windows의 cmd에서 lib.exe를 실행할 때 동일한 오류가 발생했습니다. 분명히 cmd.exe의 최대 줄 길이는 약 8K 문자이므로이 임계 값 끝에있는 파일 이름이 변경되어 잘못된 파일 이름 오류가 발생합니다. 내 해결책은 선을 다듬는 것이었다. 파일 이름에서 모든 경로를 제거하고 / LIBPATH 옵션을 사용하여 단일 경로를 추가했습니다. 예를 들면 :

/LIBPATH:absolute_path /OUT:outfilename filename1.obj filename2.obj ... filenameN.obj

이것에 대한 다른 해결책을 찾았습니다 ...

실제로 두 라이브러리 경로 사이에 쉼표 구분 기호를 놓쳤습니다. 공통점을 추가 한 후 나를 위해 일했습니다.

이동 : Project properties -> Linker -> General -> Link Library Dependencies이 경로에서 라이브러리의 경로가 올바른지 확인하십시오.

이전 코드 ( 버그 포함 -쉼표로 두 개의 lib 경로를 분리하는 것을 잊었 기 때문에) :

<Link><AdditionalLibraryDirectories>..\..\Build\lib\$(Configuration)**..\..\Build\Release;**%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

Code after fix (Just separate libraries with comma):

<Link><AdditionalLibraryDirectories>..\..\Build\lib\$(Configuration)**;..\..\Build\Release;**%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

Hope this will help you.


In my case I had the library installed using NuGet package (cpprestsdk) AND I falsely added the lib to the Additional Dependancies in the Linker settings. It turns out, the package does it all for you.

The linker then tried to find the library in the library path and of course could not find it.

After removing the library from the Additional Dependencies everything compiled and linked fine.


I created a bin directory at the project_dir level, then created a release/debug directory inside the bin folder, which solved the problem for me.

참고URL : https://stackoverflow.com/questions/6451324/visual-studio-link-fatal-error-lnk1181-cannot-open-input-file

반응형