Visual Studio 2012 Release Preview를 설치 한 후 오류 'LINK : 치명적인 오류 LNK1123 : COFF로 변환하는 동안 실패 : 파일이 잘못되었거나 손상되었습니다'오류


535

Visual Studio 2012 Release Preview를 설치했는데 문제가 없지만 Visual Studio 2010을 사용하여 C ++ 프로젝트를 컴파일하려고하면 다음 오류 메시지가 나타납니다.

LINK : 치명적 오류 LNK1123 : COFF로 변환하는 동안 실패 : 파일이 잘못되었거나 손상되었습니다

나는 이것을 100 % 확신하지는 않지만 .rc파일 이 (자원) 있는 프로젝트와 관련이있는 것 같습니다 .

프로그램 추가 / 제거에서 Visual Studio 2010을 복구하고 다시 부팅하려고했지만 아무런 영향을 미치지 않습니다.

Visual Studio 2010 도구 세트를 사용하도록 설정된 경우 Visual Studio 2012 RC를 사용하여 C ++ 프로젝트를 컴파일하면 동일한 오류가 발생합니다. Visual Studio 2011 도구 세트로 업그레이드하면 문제가 해결됩니다 (물론 프로덕션 코드에서는이 작업을 원하지 않습니다).

업데이트 : Visual Studio 2012를 제거 하고 재부팅 했는데 문제가 계속 발생합니다! 도움!


이것은 x86 문제입니까, x64 문제입니까, 아니면 둘 다입니까? 32 비트 운영 체제에서보고 있습니다. 나는 64 비트 운영 체제에서 그것을 본 것을 기억하지 않습니다.
jww

답변:


652

이 MSDN 스레드 는 수정 방법을 설명합니다.

요약:

  • 다음으로 이동하여 증분 링크를 비활성화하십시오.

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • 또는 VS2010 SP1을 설치하십시오.

편집 (@CraigRinger) : VS 2010 SP1을 설치 하면 64 비트 컴파일러제거됩니다 . 다시 가져 오려면 VS 2010 SP1 컴파일러 팩 을 설치해야합니다 .

이는 Windows 7 및 .NET 4.0 용 Microsoft Windows SDK 7.1Visual Studio 2010에 영향을줍니다 .


1
.Net 4.5를 설치 한 직후에이 문제가 발생했습니다. VS2010 SP 1을 설치하면 문제가 해결되었습니다. 어느 시점에서 VS 2012를 설치하지 않았습니다.
KJAWolf

2
CMakefile과의 증분 링크를 비활성화하려면 : cmake.org/pipermail/cmake/2010-February/035174.html
Map X

2
Visual Studio에서 Qt에서 .pro에 추가하십시오. QMAKE_LFLAGS + = / INCREMENTAL : NO 저를 위해 일했습니다
gollumullog

5
@grundic 종류의. 우리는 Win 7 SDK에서 cvtres.exe의 이름을 바꾸어 link.exe가 그것을 찾지 못하고 대신 .NET 4.5의 새로운 것을 사용합니다. Windows 8 SDK에는 더 이상 명령 줄 도구가 없습니다. 데스크톱 앱 명령 줄 도구를 사용하려면 데스크톱 용 Visual Studio 2012 Express 이상을 설치해야합니다. 이름 바꾸기 솔루션은 가장 방해가되지 않으며 쉽게 스크립팅 할 수 있습니다.
DuckPuppy

2
운 좋게도 @DuckPuppy는 빌드 에이전트에서 Microsoft .Net 4.5.1을 완전히 제거하고 .Net 4.0을 새로 설치하여이 문제를 해결했습니다. 그 후 모든 옵션이 표시된 Microsoft SDK 7.0을 다시 설치하여 문제를 해결했습니다. 또한이 사건 이후에 대비하여 자폐 업데이트를 비활성화했습니다.
grundic

249

증분 연결을 해제해도 작동하지 않고 "내장 매니페스트"를 해제해도 작동하지 않으면 여러 버전의 CVTRES.exe에 대한 경로를 검색하십시오.

/ VERBOSE 링커 옵션으로 디버깅하여 링커가 cvtres를 호출하려고 시도했을 때 링커가 해당 오류 메시지를 쓰고 있음을 발견했습니다.

내 경로 에이 유틸리티의 두 가지 버전이 있음이 밝혀졌습니다. 에 하나에 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe하나 C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. VS2012 설치 후 cvtres.exe의 VS2010 버전이 더 이상 작동하지 않습니다. 이것이 경로의 첫 번째 파일이고 링커가 .res 파일을 COFF 객체 형식으로 변환해야한다고 결정하면 LNK1123과의 연결이 실패합니다.

(오류 메시지가 실제 문제와 관련이 없다는 사실을 정말로 짜증나지만 Microsoft 제품에서는 드문 일이 아닙니다.)

이전 버전의 유틸리티를 삭제 / 이름 바꾸기하거나 PATH 변수를 다시 정렬하면 작동하는 버전이 먼저 나타납니다.

x64 툴링 빌드의 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64경우 다른 툴이 어디에 있는지 확인해야 할 수도 있습니다 cvtres.exe.


3
나를 위해 일했다. / VERBOSE에 대한 팁을 포함 해 주셔서 감사합니다. 마술로하는 것 대신에 왜 / 왜인지 보여줍니다.
M Katz

1
Visual Studio 디렉토리의 이전 파일 위에 Framework 디렉토리의 최신 파일을 복사하십시오.
Yochai Timmer

이것은 내 문제도 해결했습니다. 엄격한 UAC가있는 컴퓨터에서 작업 중이므로 명령 줄에서 어떤 cvtres.exe가 먼저 작동했는지 확인할 수있었습니다. 먼저 cvtres.exe를 실행했습니다. 그런 다음 "C : \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine : amd64 / verbose / out :"자세한 출력의 이름 "/ readonly FileFromVerboutput.res. 한 경로에 오류가 발생했습니다. .NET 하나했다.
user176692

50

버전을 확인하십시오 cvtrs.exe.

dir "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"

잘못된 버전 :
date: 03/18/2010
time: 01:16 PM
size: 31,048 바이트
name: cvtres.exe

올바른 버전 :
date: 02/21/2011
time: 06:03 PM
size: 31,056 바이트
name: cvtres.exe

잘못된 버전이있는 경우 다음에서 올바른 버전을 복사해야합니다.

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

여기에있는 것을 교체하십시오 :

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

copy "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"

이것은 비슷한 문제를 가진 다른 사람들에게 도움이 될 수 있습니다. ms 빌드를 사용하고 있으며 다음 파일을 복사해야했습니다. msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe C : \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE to C : \ Program Files ( i-am-bryan.com/webs/tutorials/에 따라이
Kell

이것은 나를 위해 일했지만 내 "올바른"cvtres.exe 파일은 다른 크기, 날짜 등이었습니다 (아직 VS 2012 bin에서 여전히)
aampere

나를 위해 .... Studio 10.0 \ VC \ bin \ amd64 \, 디렉토리에서 cvtres의 이름을 바꾸어 해결했습니다. 내가 인텔을 사용하고 있기 때문에 생각, AMD하지
다니엘 하리에게

46

MSDN 포럼 의이 스레드에 따르면 VS2012 RC 설치가 VS2010 C ++ 프로젝트를 중단합니다 . 간단히 VS2010 SP1cvtres.exe 에서 가져 옵니다.

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

또는 VS2012에서

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

과를 통해 복사 cvtres.exe에서 VS2010 RTM의 설치 (한 SP1이없는 )

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

이렇게하면 수정 된 버전 인 cvtres.exe11.0.51106.1을 효과적으로 사용할 수 있습니다 .

에서 도구의 64 비트 버전에 대해 동일한 단계를 반복하십시오 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

이 솔루션은 VS2010 용 SP1 설치의 대안입니다. 일부 경우 SP1을 설치할 수 없습니다 (예 : SP1 이전 빌드를 지원해야하는 경우).


1
그것은 나를 위해 일했다. win7 64 비트를 사용하고 있기 때문에 먼저 ... Framework64 \ v4.3 ... 폴더에서 cvtres.exe를 복사했지만 문제가 해결되지 않았습니다. 그런 다음 Framework \ v4.3 ... 폴더에서 복사하여 문제를 해결했습니다 !!!!!
falconK

36

Visual Studio 2012 RC를 설치 한 경우 .NET 4.5 RC를 설치 한 것입니다.

.NET 4.5 RC를 제거하고 필요한 버전을 설치하십시오 (VS 2010의 경우 4.0). 이렇게하면 문제가 해결 될 것입니다.

이것은 같은 문제를 해결했습니다. Visual Studio를 제거 할 필요는 없습니다.


4
큰!! .NET 4.5를 .NET 4.0으로 교체했습니다. 그리고 잘 작동합니다!
manutd

1
업데이트 : .net 4.5 및 4.0을 제거해도 문제가 해결됩니다 (VS 2010 express). 그러나 Windows 업데이트는 지속적으로 .net 4.5.1로 다시 업그레이드하는 것처럼 보이므로이를 너무 자주 반복해야합니다. 그러나 "VS 2010 SP1"과 Voila, VS 2010 express를 설치하면 .Net 4.5.1이 여전히 설치된 상태에서도 작동합니다.
rogerdpack

15

.NET Framework 4.5가 .NET Framework 4.0을 대체 하기 때문입니다 . 운없이 Visual Studio 2010을 여러 번 제거했습니다. .NET Framework 4.5를 제거하고 Visual Studio 2010을 다시 설치하면 정상적으로 작동했습니다.

새로 설치하려면 Visual Studio 11 완전히 제거를 참조하십시오 .


3
그것을 확인하십시오 !!!!!!! VC2010을 다시 설치해도 도움이되지 않습니다. framework4.5 RC를 삭제 한 후에는 괜찮습니다.
inkooboo

.net 4.5를 제거한 .net 4.5를 설치하는 umdh를 설치했습니다. .net 4.5를 제거하고 .net 4.0을 다시 설치 한 후 Visual Studio가 다시 활성화되었습니다.
stu

14

나를 위해 '생성 매니페스트 생성'을 '아니요'로 설정하면 해결되었습니다. (/ INCREMENTAL : NO로 고정됨)


14

x64를 사용하는 경우 다음 리소스가 도움이 될 것입니다 .

이 문제는 Microsoft .NET 4.5가 Visual C ++ 10과 호환되지 않기 때문에 발생합니다. 해결 방법은 Visual C ++ 버전이 아닌 .NET 버전의 cvtres.exe를 실행하는 것입니다. 이러한 파일의 Visual C ++ 버전 이름을 바꾸고 .NET 버전을 대신 복사하여이 작업을 수행했습니다.

1. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
2. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe

1. C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
2. C:\windows\Microsoft.NET\Framework64\v4.0.30319\cvtres.exe

1
참고 : 두 때문에 작동 .NET Framework 4 Multi-targeting pack .NET Framework 4.5.2 설치됩니다. 파일 C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe은에 속해 .NET Framework 4 Multi-targeting pack있습니다. 일반적으로 Windows SDK 7.1을 설치 한 후 .NET을 4.5.2로 업데이트 한 경우에 해당합니다. 이 경우 일반적으로 간단히 이름 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe을 바꿀 수 cvtres-old.exe있으며 최신 cvtres.exe(8/30/17 날짜)을 사용하고 제대로 작동합니다.
David C. Rankin

13

VS2012 RC를 완전히 제거한 다음 VS2010을 완전히 제거한 다음 VS2010을 처음부터 다시 설치 하여이 문제를 해결했습니다.

시간이 오래 걸렸지 만 이제 VS2010에서 C ++ 프로젝트를 다시 컴파일 할 수 있습니다.


11

.NET 4.5 를 제거 하고 .NET 4.0으로 바꾸면 문제가 마술처럼 해결되었습니다 . 그런 다음 Visual Studio 2010을 복구해야했습니다. 어쨌든 손상되었습니다.

이전에 Visual Studio 2012를 설치 한 다음 설치 제거했습니다. 문제와 관련이있을 수 있습니다.


2
이것은 나를 위해 일했습니다. 중요한 Windows Update로 Net 4.5를 받았습니다. 방금 제거하여 새로운 방식으로 빌드가 실패했습니다. 그런 다음 Visual Studio 2010 Express 설치를 완전히 복구 했으며 문제가 해결되었습니다.
hyde

10

Visual Studio 2012를 설치하지 않았지만 Visual Studio 2010에서이 오류가 계속 발생합니다. Visual Studio 2010 SP1을 설치 한 후에이 문제가 해결되었습니다.


9

Microsoft Visual Studio 2010 Ultimate 와 동일한 문제가 있었고이 YouTube 비디오에 설명 된 방법으로 해결되었습니다.

비디오 파일의 이름을 변경 제안 cvtres.exe 에서 C를 : \의 Program Files (x86) \ 마이크로 소프트 비주얼 스튜디오 10.0 \ VC \ 빈 (in my Win7X64 matchine)cvtres - old.exe


6

사용자에게 +1 답변을 줄입니다 입니다.

와 함께 이것에 대한 디버깅을 시도했지만 MSBuildmsbuild /v:diag보입니다. 로, 실행 파일에 매니페스트 포함하려고하고 <somename> .dll.embed.manifest.res 그 자원은 링커 명령 행에 <somename> .dll.embed.manifest에서 빌드 된 파일입니다. 그러나 매니페스트 파일은 빈 유니 코드 텍스트 파일입니다. (즉, 유니 코드 0xFEFF 접두사가있는 2 바이트 파일)

따라서 루트 문제는 해당 매니페스트 파일이 생성되지 않거나 <somename> .dll.intermediate.manifest를 사용해야 할 때 사용되는 것으로 보입니다.

또 다른 해결책은 속성, 매니페스트 도구, 입력 및 출력에서 ​​"내장 매니페스트"옵션을 끄는 것 같습니다.


6

Incremental Linking 활성화-> "아니오 (/ INCREMENTAL : NO)"후에는 작동하지 않지만 rc 파일을 삭제 한 후에는 작동합니다.


5

요약:

Step1

Project Properties 
   -> Configuration Properties 
       -> Linker (General) 
          -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"

1 단계가 작동하지 않으면 2 단계를 수행하십시오.

Project Properties 
   -> Configuration Properties 
       -> Manifest Tool (Input and Output) 
          -> Enable Incremental Linking -> "No"

2 단계가 작동하지 않으면 3 단계 파일 복사 중 하나를 수행하십시오.

  1. C : \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ bin \ cvtres.exe
  2. C : \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ cvtres.exe
  3. C : \ Program Files (x86) \ Microsoft Visual Studio 13.0 \ VC \ bin \ cvtres.exe

    그런 다음 C : \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe로 바꾸십시오. 나와 함께 3 단계를 수행하십시오.


4

2014 년 1 월 현재 .NET Framework 4.5.1을 설치 한 이유 때문에 타사 소프트웨어 설치 또는 자동 업데이트로 인한 것인지 모르겠습니다.

1 월 29 일에 하나의 구성 요소를 설치했으며

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 

메시지. 그때 나는 증분 링크를 피함으로써 해결했다.

1 월 31 일에 .NET Framework 4.5.1의 다른 구성 요소를 설치했으며 증분 링크 트릭이 더 이상 작동하지 않았습니다. 그런 다음 Visual Studio 2010 SP1을 설치했지만 나중에 문제가 발생했습니다.

Error   6   error LNK1104: cannot open file 'msvcrtd.lib'. 

SP1이 Visual Studio 2010 설치를 망쳤다 고 생각합니다.

따라서 .NET Framework 4.5.1을 제거하고 .NET Framework 4.0을 설치 한 다음 Visual Studio 2010을 제거했다가 다시 설치했습니다.


3

서비스 팩을 설치하더라도 오류가 발생하면 C : \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin 폴더에서 cvtres.exe를 제거하거나 이름을 바꾸십시오. 이것은 나를 위해 일했습니다.


그것은 나를 위해 일했다. 그러나 나는 이것이 어떻게 문제인지 알지 못했습니다. 당신이 말해 줄 수 있다면 감사하겠습니다. 감사.
DTdev

2
아래 답변에서 @Rich Peck 은이 동작의 이유를 설명했습니다.
nerd

1

내가 설정 증분 링크하기 사용"아니오 (/ INCREMENTAL : NO)"을 그리고 그것은 나를 위해 작동하지 않습니다 .

다음으로 변경했습니다.

Project Properties 
   -> Configuration Properties 
       -> General
          -> Platform Toolset -> "Visual Studio 2012 (v110)"

그리고 그것은 나를 위해 작동합니다 :)


이하지 않습니다 작품은 당신이 경우 필요 WINXP 플랫폼에서 디버깅 인 실행 파일을 만들 수 있습니다.
Jay Elston

죄송하지만 이것은 해결책이 아닙니다. 완전히 다른 컴파일러 인 툴셋을 변경하고 있습니다
Semih Ozmen

1

CMake를 다시 설치하면 나에게 도움이되었습니다. CMake의 새로운 사본은 10 대신 Visual Studio 11을 사용해야한다는 것을 알았습니다.


1

핵심 Win32 프로그래밍에 Windows SDK를 사용하고 있으며 "알 수없는"이유로 .NET 4.5를 설치했습니다. 나는 그것을 제거하고 이전 답변과 같은 4.0을 설치했으며 그래, 나에게도 효과가 있었다.

SDK를 사용하여 Win32 앱을 빌드하기 위해 쓸모없는 .NET 프레임 워크를 사용해야한다는 사실에 놀랐습니다.


1

나는 다음을 수행하여 이것을 해결했다.

  1. 명령 프롬프트에서 msconfig를 입력하고 Enter를 누르십시오.
  2. 서비스 탭을 클릭하십시오.
  3. "응용 프로그램 경험"을 찾아 확인 표시를합니다 (즉, 활성화하려면 선택).
  4. 확인을 클릭하십시오. 필요한 경우 다시 시작하십시오.

따라서 문제는 영원히 지속될 것입니다. 방해없이 임의로 빌드하고 C ++ 프로젝트를 디버깅하십시오.


services.msc에서 Applicaton Experienc 서비스를 활성화 할 수도 있습니다
App Work

2
이 문제를 해결하기 위해 무엇을합니까?
mabraham

1

OpenGL SuperBible 6th 소스 코드 샘플을 사용하여이 문제에 대한 솔루션을 찾고자하는 사람들을 위해 솔루션은 Debug 대신 Release 에서 빌드됩니다 . 모든 프로젝트는 릴리스 버전 에서 증분 링크 옵션을 비활성화했습니다 .


1

내 문제는 PC에 동일한 라이브러리가 포함 된 두 개의 경로가 있다는 것입니다. 두 경로 모두 구성 특성-> 링커-> 일반추가 라이브러리 디렉토리추가 되었습니다 . 경로 중 하나를 제거하면 문제가 해결되었습니다.


1

.NET을 업데이트 한 후에도 같은 문제가 발생했습니다. 먼저 .NET 프레임 워크를 제거한 후 visualstudio.com 에서 Visual Studio를 다운로드 하고 "복구"를 선택했습니다.

NET 프레임 워크는 Visual Studio와 함께 자동으로 설치되었습니다-> 이제는 잘 작동합니다!


1

몇 번 시도하고 마침내 VS2010을 여러 번 제거하여 문제를 해결했습니다. 모든 파일을 제거하지는 않았으므로 처음으로 작동하지 않는 것 같습니다.

VS2012를 설치할 때 VS2010 SP1이 있으면 두 프로그램 모두에서 동일한 프로젝트를 수행 할 수 없다고합니다. 하나의 프로그램 만 사용하는 것이 좋습니다.

감사!


1

이전에 Visual Studio 2010이 설치된 컴퓨터에 Visual Studio 2017 및 .NET Framework 4.6을 설치 한 후이 문제가 발생했습니다.

문제는 이러한 설치 후 C : \ Windows \ System32의 msvcr100_clr0400.dll 파일이 ~ 19Kb 의 아주 작은 크기의 새 파일 로 덮어 쓰여졌지만 이전 파일은 ~ 800Kb 였습니다.

다른 빌드 시스템에서 수동으로 파일을 복원 한 후 cvtres.exe가 다시 제대로 작동하기 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.