Lỗi 'LINK: lỗi nghiêm trọng LNK1123: lỗi trong khi chuyển đổi sang COFF: tệp không hợp lệ hoặc bị hỏng' sau khi cài đặt Visual Studio 2012 Bản xem trước phát hành


535

Tôi đã cài đặt Visual Studio 2012 Release Preview và nó có vẻ ổn, nhưng bây giờ khi tôi cố gắng sử dụng Visual Studio 2010 để biên dịch các dự án C ++, tôi nhận được thông báo lỗi sau:

LINK: lỗi nghiêm trọng LNK1123: thất bại trong khi chuyển đổi sang COFF: tệp không hợp lệ hoặc bị hỏng

Tôi không chắc chắn 100% về điều này, nhưng dường như nó có liên quan đến các dự án có .rctệp (tài nguyên) trong đó.

Tôi đã thử sửa chữa Visual Studio 2010 từ Thêm / Xóa chương trình và khởi động lại, nhưng điều này không có hiệu quả.

Tôi cũng gặp lỗi tương tự nếu tôi sử dụng Visual Studio 2012 RC để biên dịch các dự án C ++ khi được thiết lập để sử dụng bộ công cụ Visual Studio 2010. Nâng cấp lên bộ công cụ Visual Studio 2011 khắc phục sự cố (nhưng tất nhiên tôi không muốn làm điều này cho mã sản xuất).

Cập nhật: Tôi đã gỡ cài đặt Visual Studio 2012 , khởi động lại và vấn đề vẫn còn tồn tại! Cứu giúp!


Đây có phải là vấn đề x86, vấn đề x64 hay cả hai? Tôi đang nhìn thấy nó trên hệ điều hành 32 bit. Tôi không nhớ là đã thấy nó trên hệ điều hành 64 bit.
jww

Câu trả lời:


652

Chủ đề MSDN này giải thích làm thế nào để sửa nó.

Để tóm tắt:

  • Hoặc vô hiệu hóa liên kết gia tăng, bằng cách đi đến

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • hoặc cài đặt VS2010 SP1.

Chỉnh sửa (@CraigRinger): Lưu ý rằng việc cài đặt VS 2010 SP1 sẽ xóa trình biên dịch 64 bit . Bạn cần cài đặt gói trình biên dịch VS 2010 SP1 để lấy lại chúng.

Điều này ảnh hưởng đến Microsoft Windows SDK 7.1 cho Windows 7 và .NET 4.0 cũng như Visual Studio 2010 .


1
Tôi gặp vấn đề này ngay sau khi cài đặt .Net 4.5. Cài đặt VS2010 SP 1 đã giải quyết nó. Tôi đã không cài đặt VS 2012 tại bất kỳ điểm nào.
KJAWolf

2
Để vô hiệu hóa liên kết gia tăng với CMakefile: cmake.org/pipermail/cmake/2010-F/2/035174.html
Bản đồ X

2
Trong Qt trong Visual Studio, hãy thêm vào .pro: QMAKE_LFLAGS + = / INCREMENTAL: NO Worked for me
gollumullog

5
@grundic Sắp xếp của. Chúng tôi đã đổi tên cvtres.exe từ sdk Win 7 để link.exe không tìm thấy nó và thay vào đó sử dụng cái mới từ .NET 4.5. SDK Windows 8 không còn chứa các công cụ dòng lệnh. Bây giờ bạn phải cài đặt ít nhất Visual Studio 2012 Express cho Máy tính để bàn để có được các công cụ dòng lệnh ứng dụng máy tính để bàn. Giải pháp đổi tên được coi là ít gây rối nhất và có thể dễ dàng được viết kịch bản.
DuckPuppy

2
@DuckPuppy may mắn, chúng tôi đã giải quyết vấn đề này bằng cách xóa hoàn toàn Microsoft .Net 4.5.1 khỏi các tác nhân xây dựng và cài đặt mới .Net 4.0. Và sau đó, chúng tôi đã chạy lại cài đặt Microsoft SDK 7.0 với tất cả các tùy chọn được đánh dấu - điều này đã giải quyết được các vấn đề của chúng tôi. Ngoài ra, sau sự cố này, chúng tôi đã vô hiệu hóa cập nhật tự động - chỉ trong trường hợp.
2014 lúc 9:30

249

Nếu việc vô hiệu hóa liên kết gia tăng không hiệu quả với bạn và tắt "Bản kê khai nhúng" cũng không hoạt động, thì hãy tìm đường dẫn của bạn để biết nhiều phiên bản CVTRES.exe.

Bằng cách gỡ lỗi với tùy chọn liên kết / ĐỘNG TỪ, tôi thấy trình liên kết đã viết thông báo lỗi đó khi nó cố gắng gọi cvtres và nó đã thất bại.

Hóa ra tôi có hai phiên bản của tiện ích này trong đường dẫn của mình. Một tại C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exevà một tại C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Sau khi cài đặt VS2012, phiên bản VS2010 của cvtres.exe sẽ không còn hoạt động. Nếu đó là cái đầu tiên trong đường dẫn của bạn và trình liên kết quyết định nó cần chuyển đổi tệp .res thành định dạng đối tượng COFF, liên kết sẽ thất bại với LNK1123.

(Thật khó chịu khi thông báo lỗi không liên quan đến vấn đề thực tế, nhưng điều đó không phải là bất thường đối với một sản phẩm của Microsoft.)

Chỉ cần xóa / đổi tên phiên bản cũ của tiện ích hoặc sắp xếp lại biến PATH của bạn để phiên bản hoạt động được ưu tiên.

Xin lưu ý rằng đối với các bản dựng công cụ x64, bạn cũng có thể phải kiểm tra xem C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64nơi nào khác cvtres.exe.


3
Đã làm cho tôi. Cảm ơn vì đã bao gồm mẹo về / ĐỘNG TỪ, trong đó cho thấy cách thức / lý do thay vì chỉ những điều kỳ diệu để làm.
M Katz

1
Chỉ cần sao chép tệp mới hơn trong thư mục Framework so với tệp cũ trong thư mục phòng thu trực quan.
Timoch Yochai

Điều này cũng giải quyết vấn đề của tôi. Tôi đang làm việc với một máy tính có UAC nghiêm ngặt vì vậy tôi có thể xác nhận cvtres.exe nào hoạt động đầu tiên từ dòng lệnh. Lần đầu tiên chạy nơi cvtres.exe. Sau đó "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Tên từ đầu ra dài dòng "/ chỉ đọc FileFromVerboutput.res. Một đường dẫn hiển thị lỗi, .NET một đã hoạt động.
user176692

50

Kiểm tra phiên bản của cvtrs.exe:

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

Phiên bản sai
date:: 18/03/2010
time: 01:16 PM : 31.048
sizebyte
name: cvtres.exe

Phiên bản chính xác
date:: 02/21/2011
time: 06:03 PM
size: 31.056 byte
name: cvtres.exe

Nếu bạn có phiên bản sai, bạn nên sao chép phiên bản chính xác từ:

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

và thay thế một ở đây:

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

I E

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"

Điều này có thể giúp một số người khác có vấn đề tương tự. Tôi đang sử dụng ms build và tôi đã phải Sao chép các tệp này: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe Từ C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE sang C: \ Program Files ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin ngoài điều này, theo i-am-bryan.com/webs/tutorials/ Lỗi
Kell

Điều này làm việc cho tôi, nhưng "đúng" tập tin cvtres.exe tôi là một kích thước khác nhau, ngày tháng, vv (Tuy nhiên từ VS 2012 bin, mặc dù)
aampere

Đối với tôi đã giải quyết bằng cách đổi tên cvtres từ .... Studio 10.0 \ VC \ bin \ amd64 \, thư mục. Tôi nghĩ bởi vì tôi đang sử dụng intel chứ không phải amd
Daniel Hári

46

Theo chủ đề này trong các diễn đàn MSDN: Cài đặt RC VS2012 phá vỡ các dự án VS2010 C ++ , đơn giản, lấy cvtres.exetừ VS2010 SP1

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

hoặc từ VS2012

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

và sao chép nó qua cvtres.exetrong VS2010 RTM cài đặt (một trong những không có SP1 )

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

Bằng cách này, bạn sẽ sử dụng hiệu quả phiên bản đã sửa cvtres.exelà 11.0.51106.1.

Lặp lại các bước tương tự cho phiên bản 64 bit của công cụ C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Giải pháp này là một giải pháp thay thế cho việc cài đặt SP1 cho VS2010 - trong một số trường hợp, bạn chỉ đơn giản là không thể cài đặt SP1 (tức là nếu bạn cần hỗ trợ các bản dựng trước SP1).


1
Điều đó làm việc cho tôi. Vì tôi đang dùng win7 64 bit, lần đầu tiên tôi đã sao chép cvtres.exe từ thư mục ... Framework64 \ v4.3 ..., nhưng điều đó không giải quyết được vấn đề. Sau đó sao chép nó từ thư mục Framework \ v4.3 ... và điều đó đã giải quyết vấn đề CẢM ƠN !!!!!
chim ưng

36

Nếu bạn đã cài đặt Visual Studio 2012 RC, thì nó đã cài đặt .NET 4.5 RC.

Gỡ cài đặt .NET 4.5 RC và cài đặt phiên bản bạn cần (4.0 cho VS 2010). Điều này sẽ làm sáng tỏ bất kỳ vấn đề bạn đang gặp phải.

Điều này giải quyết vấn đề tương tự. Không cần phải gỡ cài đặt Visual Studio.


4
Tuyệt quá!! Tôi chỉ thay thế .NET 4.5 bằng .NET 4.0. và nó hoạt động tốt !!
manutd

1
cập nhật: gỡ cài đặt .net 4.5 và 4.0 sẽ sửa lỗi cho tôi (VS 2010 express). tuy nhiên, bản cập nhật windows dường như liên tục nâng cấp trở lại .net 4.5.1 vì vậy tôi phải lặp lại điều này thường xuyên. Tuy nhiên, cài đặt "VS 2010 SP1" và voila, VS 2010 express hiện cũng hoạt động, với .Net 4.5.1 vẫn được cài đặt.
rogerdpack

15

Đó là vì .NET Framework 4.5 đang thay thế .NET Framework 4.0. Tôi đã gỡ cài đặt Visual Studio 2010 nhiều lần mà không gặp may. Khi tôi gỡ bỏ .NET Framework 4.5 và cài đặt lại Visual Studio 2010, nó đã hoạt động tốt.

Xem Gỡ cài đặt hoàn toàn Visual Studio 11 để thực hiện cài đặt mới .


3
Hãy tin vào điều đó !!!!!!! Chỉ cần cài đặt lại VC2010 không giúp được gì. Sau khi xóa framework4.5 RC, nó ổn.
inkooboo

Tôi đã cài đặt umdh cài đặt .net 4.5 đã phá vỡ visual studio 2010. sau khi gỡ cài đặt .net 4.5 và cài đặt lại .net 4.0 studio hình ảnh của tôi đã hoạt động trở lại.
stu

14

Đối với tôi, cài đặt 'Tạo tệp kê khai' thành 'Không' đã sửa nó. (Cũng được cố định với / TĂNG CƯỜNG: KHÔNG)


14

Nếu bạn đang sử dụng x64, đây là một tài nguyên sẽ giúp :

Điều này xảy ra vì Microsoft .NET 4.5 không tương thích với Visual C ++ 10. Cách giải quyết là đảm bảo rằng bạn chạy phiên bản .NET của cvtres.exe chứ không phải phiên bản Visual C ++. Tôi đã làm điều này bằng cách đổi tên các phiên bản Visual C ++ của các tệp đó và sao chép các phiên bản .NET ở vị trí của chúng.

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
lưu ý: điều này hoạt động vì cả hai .NET Framework 4 Multi-targeting pack .NET Framework 4.5.2 được cài đặt. Các tập tin C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exethuộc về .NET Framework 4 Multi-targeting pack. Đây thường là trường hợp nếu bạn đã cài đặt Windows SDK 7.1 và sau đó đã cập nhật .NET lên 4.5.2. Trong trường hợp này, bạn có thể thường chỉ cần đổi tên C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exeđể cvtres-old.exevà mới hơn cvtres.exe(ngày 8/30/17) sẽ được sử dụng và làm việc tốt.
David C. Rankin

13

Cuối cùng tôi đã giải quyết vấn đề này bằng cách thực hiện gỡ cài đặt đầy đủ VS2012 RC, sau đó là gỡ cài đặt đầy đủ VS2010, sau đó cài đặt lại từ đầu VS2010.

Mất mãi mãi, nhưng giờ tôi có thể biên dịch lại các dự án C ++ trong VS2010.


11

Vấn đề đã được tôi giải quyết một cách kỳ diệu bằng cách loại bỏ .NET 4.5 và thay thế nó bằng .NET 4.0 . Sau đó tôi đã phải sửa chữa Visual Studio 2010 - nó bị hỏng dọc đường.

Tôi đã cài đặt trước đó và sau đó chưa cài đặt, Visual Studio 2012 - có thể liên quan đến sự cố.


2
Điều này làm việc cho tôi. Tôi đã nhận được Net 4.5 là Windows Update quan trọng. Tôi vừa gỡ cài đặt nó, khiến cho việc xây dựng thất bại theo một cách mới. Sau đó, tôi đã sửa chữa hoàn toàn cài đặt Visual Studio 2010 Express và đã khắc phục được sự cố.
hyde

10

Tôi chưa cài đặt Visual Studio 2012, nhưng tôi vẫn gặp lỗi này trong Visual Studio 2010. Tôi đã giải quyết vấn đề này sau khi cài đặt Visual Studio 2010 SP1.


9

Tôi gặp vấn đề tương tự với Microsoft Visual Studio 2010 Ultimate và nó đã được giải quyết bằng phương pháp được mô tả trong video youtube này

Video đề nghị đổi tên tệp cvtres.exe trong C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) thành cvtres-old.exe


6

+1 cho người dùng Viết tắt cho câu trả lời phù hợp với tôi!

Tôi đã cố gắng thực hiện một số sửa lỗi này msbuild /v:diagvà tôi thấy rằng MSBuild đang cố gắng nhúng một bảng kê khai vào tệp thực thi, với <somename>. tệp được xây dựng từ <somename> đậm.embed.manifest. Nhưng tệp kê khai là một tệp văn bản Unicode trống. (Đó là, một tệp hai byte có tiền tố Unicode 0xFEFF)

Vì vậy, vấn đề gốc dường như có liên quan đến tệp tệp kê khai đó không được tạo hoặc nó được sử dụng khi <somename> dll.inter liền.manifest nên được sử dụng.

Một giải pháp thay thế dường như là tắt tùy chọn "Nhúng Manifest" trong Thuộc tính, Công cụ kê khai, Đầu vào và Đầu ra.


6

Nó không hoạt động với tôi sau khi kích hoạt liên kết tăng dần -> "Không (/ TĂNG CƯỜNG: KHÔNG)", nhưng nó hoạt động với tôi sau khi tôi xóa tệp RC.


5

Để tóm tắt:

Step1

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

Nếu bước 1 không hoạt động, hãy thực hiện Bước 2

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

nếu bước 2 không hoạt động, hãy thực hiện Bước 3 Sao chép tệp một trong:

  1. C: \ Tệp chương trình (x86) \ Microsoft Visual Studio 11.0 \ VC \ bin \ cvtres.exe
  2. C: \ Tệp chương trình (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ cvtres.exe
  3. C: \ Tệp chương trình (x86) \ Microsoft Visual Studio 13.0 \ VC \ bin \ cvtres.exe

    Sau đó, thay thế bằng C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Với tôi, thực hiện 3 bước để nó hoạt động


4

Kể từ tháng 1 năm 2014, vì một số lý do tôi đã cài đặt .NET Framework 4.5.1, tôi không biết là do cài đặt phần mềm của bên thứ ba hoặc do cập nhật tự động.

Vào ngày 29 tháng 1, tôi đã cài đặt một thành phần và tôi bắt đầu nhận được

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

thông điệp. Vào thời điểm đó, tôi đã giải quyết bằng cách tránh liên kết gia tăng.

Vào ngày 31 tháng 1, tôi đã cài đặt một thành phần khác của .NET Framework 4.5.1 và thủ thuật liên kết gia tăng không còn hoạt động nữa. Sau đó tôi đã cài đặt Visual Studio 2010 SP1, nhưng sau đó, vấn đề đã trở thành:

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

Tôi nghĩ rằng SP1 đã làm hỏng cài đặt Visual Studio 2010 của tôi.

Vì vậy, tôi đã gỡ cài đặt .NET Framework 4.5.1, cài đặt .NET Framework 4.0 và gỡ cài đặt và sau đó cài đặt lại Visual Studio 2010. Điều đó hiệu quả với tôi.


3

Ngay cả khi kiểm tra cài đặt Gói dịch vụ bạn cũng gặp lỗi, hãy thử xóa / đổi tên cvtres.exe trong thư mục C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. Điều này đã làm việc cho tôi.


Nó làm việc cho tôi. Nhưng tôi đã không hiểu làm thế nào đây là một vấn đề. Nó sẽ được đánh giá cao nếu bạn có thể nói với tôi. Cảm ơn.
DTdev 11/03/2015

2
Trong câu trả lời dưới đây, @Rich Peck đã giải thích lý do cho hành vi này.
mọt sách

1

Tôi đặt Bật liên kết tăng dần thành "Không (/ TĂNG CƯỜNG: KHÔNG)" và nó không hoạt động đối với tôi .

Tiếp theo tôi đã thay đổi:

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

và nó hoạt động với tôi :)


Điều này sẽ không hoạt động nếu bạn cần tạo một tệp thực thi có thể gỡ lỗi trên nền tảng WinXP.
Jay Elston

xin lỗi nhưng đây không phải là một giải pháp..bạn đang thay đổi bộ công cụ là một trình biên dịch hoàn toàn khác
Semih Ozmen

1

Cài đặt lại CMake làm việc cho tôi. Bản sao mới của CMake đã tìm ra rằng nó nên sử dụng Visual Studio 11 thay vì 10.


1

Tôi đã sử dụng Windows SDK để lập trình Win32 lõi và đã cài đặt .NET 4.5 vì những lý do "không xác định". Tôi đã gỡ cài đặt nó và cài đặt 4.0 như các câu trả lời trước đó và vâng, nó cũng hoạt động với tôi.

Tôi rất ngạc nhiên khi tôi phải sử dụng .NET framework vô dụng để xây dựng các ứng dụng Win32 bằng SDK.


1

Tôi đã giải quyết điều này bằng cách làm như sau:

  1. Trong một dấu nhắc lệnh, nhập msconfig và nhấn enter.
  2. Nhấp vào tab dịch vụ.
  3. Tìm kiếm "Trải nghiệm ứng dụng" và đánh dấu (nghĩa là chọn mục này để bật).
  4. Nhấn OK. Và khởi động lại nếu cần thiết.

Do đó, vấn đề sẽ đi mãi mãi. Đừng xây dựng ngẫu nhiên và gỡ lỗi các dự án C ++ của bạn mà không có sự xáo trộn nào.


Bạn cũng có thể kích hoạt dịch vụ Applicaton Experienc từ services.msc
Ứng dụng làm việc

2
Điều này làm gì để giải quyết vấn đề?
mabraham

1

Đối với những người tìm kiếm giải pháp cho vấn đề này với các mẫu mã nguồn thứ 6 OpenGL SuperBible, giải pháp này được xây dựng trong Bản phát hành thay vì Gỡ lỗi . Tất cả các dự án đã vô hiệu hóa tùy chọn liên kết gia tăng trong phiên bản Phát hành .


1

Vấn đề của tôi là tôi đã có hai đường dẫn trên PC có cùng thư viện. Cả hai đường dẫn đã được thêm vào Thư mục thư viện bổ sung trong Thuộc tính cấu hình -> Trình liên kết -> Chung . Loại bỏ một trong những con đường đã giải quyết vấn đề.


1

Tôi gặp vấn đề tương tự sau khi cập nhật .NET: Trước tiên tôi đã gỡ cài đặt .NET framework, tải xuống visual studio từ visualstudio.com và chọn "sửa chữa".

NET framework đã được cài đặt tự động với visual studio -> và bây giờ nó hoạt động tốt!


1

Tôi đã thử một vài lần và cuối cùng đã giải quyết vấn đề bằng cách gỡ cài đặt nhiều lần VS2010. Tôi nghĩ rằng tôi đã gỡ cài đặt tất cả các tệp và đó là lý do tại sao lần đầu tiên nó không hoạt động.

Trong quá trình cài đặt VS2012, người ta nói rằng nếu bạn có VS2010 SP1, bạn không thể làm việc trên cùng một dự án trong cả hai chương trình. Đó là khuyến cáo chỉ có một chương trình.

Cảm ơn!


1

Tôi gặp vấn đề này sau khi tôi cài đặt Visual Studio 2017 và .NET Framework 4.6 trên máy mà trước đó đã có Visual Studio 2010.

Vấn đề là sau khi cài đặt như vậy, tệp msvcr100_clr0400.dll từ C: \ Windows \ System32 đã bị ghi đè bằng tệp mới với kích thước rất nhỏ ~ 19 Kb, tuy nhiên tệp cũ là ~ 800 Kb.

Sau khi tôi khôi phục tệp theo cách thủ công từ một máy xây dựng khác, cvtres.exe bắt đầu hoạt động bình thường trở lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.