Kesalahan 'LINK: kesalahan fatal LNK1123: kegagalan selama konversi ke COFF: file tidak valid atau rusak' setelah menginstal Pratinjau Rilis Visual Studio 2012

535

Saya telah menginstal Pratinjau Rilis Visual Studio 2012, dan tampaknya baik-baik saja, tetapi sekarang ketika saya mencoba menggunakan Visual Studio 2010 untuk mengkompilasi proyek C ++, saya mendapatkan pesan kesalahan berikut:

LINK: kesalahan fatal LNK1123: kegagalan selama konversi ke COFF: file tidak valid atau rusak

Saya tidak 100% yakin akan hal ini, tetapi tampaknya terkait dengan proyek yang memiliki .rcfile (sumber daya) di dalamnya.

Saya sudah mencoba memperbaiki Visual Studio 2010 dari Tambah / Hapus program dan reboot, tetapi ini tidak berpengaruh.

Saya juga mendapatkan kesalahan yang sama jika saya menggunakan Visual Studio 2012 RC untuk mengkompilasi proyek C ++ ketika diatur untuk menggunakan Visual Studio 2010 toolset. Memutakhirkan ke Visual Studio 2011 toolset memperbaiki masalah (tapi tentu saja saya tidak ingin melakukan ini untuk kode produksi).

Pembaruan: Saya telah menghapus instalasi Visual Studio 2012 , reboot, dan masalahnya masih berlanjut! Tolong!

Orion Edwards
sumber
Apakah ini masalah x86, masalah x64, atau keduanya? Saya melihatnya di sistem operasi 32-bit. Saya tidak ingat melihatnya di sistem operasi 64-bit.
jww

Jawaban:

652

Utas MSDN ini menjelaskan cara memperbaikinya.

Untuk meringkas:

  • Nonaktifkan penautan tambahan, dengan masuk ke

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • atau instal VS2010 SP1.

Suntingan (@CraigRinger): Perhatikan bahwa menginstal VS 2010 SP1 akan menghapus kompiler 64-bit . Anda perlu menginstal paket kompiler VS 2010 SP1 untuk mendapatkannya kembali.

Ini mempengaruhi Microsoft Windows SDK 7.1 untuk Windows 7 dan .NET 4.0 serta Visual Studio 2010 .

Pendek
sumber
1
Saya mengalami masalah ini segera setelah menginstal. Net 4.5. Instalasi VS2010 SP 1 mengatasinya. Saya tidak menginstal VS 2012 kapan pun.
KJAWolf
2
Untuk menonaktifkan tautan tambahan dengan CMakefile: cmake.org/pipermail/cmake/2010-Februari/035174.html
Peta X
2
Dalam Qt di bawah Visual Studio, tambahkan ke .pro Anda: QMAKE_LFLAGS + = / INCREMENTAL: TIDAK Bekerja untuk saya
gollumullog
5
Semacam grundic dari. Kami mengganti nama cvtres.exe dari Win 7 sdk sehingga link.exe tidak menemukannya dan sebagai gantinya menggunakan yang baru dari .NET 4.5. Windows 8 SDK tidak lagi berisi alat-alat baris perintah. Anda sekarang harus menginstal setidaknya Visual Studio 2012 Express untuk Desktop untuk mendapatkan alat baris perintah aplikasi desktop. Mengubah nama solusi dianggap paling tidak mengganggu, dan dapat dengan mudah dituliskan.
DuckPuppy
2
@DuckPuppy untungnya, kami memecahkan masalah ini dengan menghapus Microsoft .Net 4.5.1 dari agen build kami dan menginstal .Net 4.0. Dan setelah itu kami menjalankan instal ulang Microsoft SDK 7.0 dengan semua opsi ditandai - ini menyelesaikan masalah kami. Selain itu, setelah kejadian ini, kami menonaktifkan pembaruan otomatis - untuk berjaga-jaga.
grundic
249

Jika menonaktifkan tautan tambahan tidak berfungsi untuk Anda, dan mematikan "Embed Manifest" juga tidak berfungsi, maka cari jalur Anda untuk beberapa versi CVTRES.exe.

Dengan debugging dengan opsi / VERBOSE linker saya menemukan linker sedang menulis pesan kesalahan ketika mencoba untuk memanggil cvtres dan gagal.

Ternyata saya memiliki dua versi utilitas ini di jalur saya. Satu di C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exedan satu di C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Setelah VS2012 menginstal, versi cvtres.exe VS2010 tidak akan berfungsi lagi. Jika itu yang pertama di jalur Anda, dan penghubung memutuskan perlu mengonversi file .res ke format objek COFF, tautan akan gagal dengan LNK1123.

(Benar-benar menyebalkan bahwa pesan kesalahan tidak ada hubungannya dengan masalah aktual, tetapi itu tidak biasa untuk produk Microsoft.)

Cukup hapus / ganti nama versi utilitas yang lama, atau atur ulang variabel PATH Anda, sehingga versi yang berfungsi lebih dulu.

Ketahuilah bahwa untuk build tool x64 Anda mungkin juga harus memeriksa di C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64mana ada tool lain cvtres.exe.

Mati di Sente
sumber
3
Bekerja untukku. Terima kasih telah menyertakan tip tentang / VERBOSE, yang menunjukkan bagaimana / mengapa alih-alih hal ajaib apa yang harus dilakukan.
M Katz
1
Cukup salin file yang lebih baru di direktori Framework di atas yang lama di direktori visual studio.
Yochai Timmer
Ini menyelesaikan masalah saya juga. Saya bekerja dari komputer yang memiliki UAC yang ketat sehingga saya dapat mengkonfirmasi cvtres.exe mana yang bekerja pertama kali dari baris perintah. Pertama berlari di mana cvtres.exe. Lalu "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Nama dari keluaran verbose "/ readFly FileFromVerboutput.res. Satu jalur menunjukkan kesalahan, the .NET satu bekerja
user176692
50

Periksa versi cvtrs.exe:

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

Versi yang salah
date:: 03/18/2010
time: 01:16 PM
size: 31.048 byte
name: cvtres.exe

Versi yang benar
date:: 02/21/2011
time: 06:03 PM
size: 31.056 byte
name: cvtres.exe

Jika Anda memiliki versi yang salah, Anda harus menyalin versi yang benar dari:

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

dan ganti yang di sini:

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

yaitu

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"
Sid
sumber
Ini mungkin membantu beberapa orang lain dengan masalah serupa. Saya menggunakan ms build dan saya harus menyalin file-file ini: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe Dari C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE ke C: \ Program Files ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin selain dari ini, sesuai i-am-bryan.com/webs/tutorials/…
Kell
Ini bekerja untuk saya, tetapi file cvtres.exe "benar" saya memiliki ukuran, tanggal, dll yang berbeda (Masih dari VS 2012 bin, meskipun)
aampere
Bagi saya diselesaikan dengan mengganti nama cvtres dari .... Studio 10.0 \ VC \ bin \ amd64 \, direktori. Saya pikir karena saya menggunakan intel, bukan amd
Daniel Hári
46

Menurut utas ini di forum MSDN: Instalasi VS2012 RC memecah proyek VS2010 C ++ , cukup, ambil cvtres.exedari VS2010 SP1

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

atau dari VS2012

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

dan menyalinnya selama cvtres.exedi VS2010 RTM instalasi (yang tanpa SP1 )

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

Dengan cara ini, Anda akan secara efektif menggunakan versi cvtres.exeyang sudah diperbaiki yaitu 11.0.51106.1.

Ulangi langkah yang sama untuk alat versi 64-bit C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Solusi ini merupakan alternatif untuk pemasangan SP1 untuk VS2010 - dalam beberapa kasus Anda tidak dapat menginstal SP1 (yaitu jika Anda perlu mendukung build pra-SP1).

mloskot
sumber
1
Itu berhasil bagi saya. Karena saya menggunakan win7 64-bit, saya pertama kali menyalin cvtres.exe dari folder ... Framework64 \ v4.3 ..., tetapi itu tidak menyelesaikan masalah. Kemudian disalin dari folder Framework \ v4.3 ... dan itu memecahkan masalah TERIMA KASIH !!!!!
FalconK
36

Jika Anda telah menginstal Visual Studio 2012 RC, maka itu menginstal .NET 4.5 RC.

Hapus instalan .NET 4.5 RC, dan instal versi yang Anda butuhkan (4.0 untuk VS 2010). Ini akan menyelesaikan masalah yang Anda alami.

Ini memecahkan masalah yang sama. Tidak perlu menghapus Visual Studio.

B_Dubb42
sumber
4
Bagus!! Saya hanya mengganti .NET 4.5 dengan .NET 4.0. dan itu bekerja dengan baik !!
manutd
1
pembaruan: menghapus instalan .net 4.5 dan 4.0 tidak memperbaikinya bagi saya (VS 2010 express). Namun pembaruan windows tampaknya terus-menerus meningkatkan kembali ke .net 4.5.1 jadi saya harus mengulang ini setiap begitu sering Namun, memasang "VS 2010 SP1" dan voila, VS 2010 express sekarang juga berfungsi, dengan .Net 4.5.1 masih diinstal.
rogerdpack
15

Itu karena .NET Framework 4.5 menggantikan .NET Framework 4.0. Saya menghapus Visual Studio 2010 beberapa kali tanpa hasil. Ketika saya menghapus .NET Framework 4.5 dan menginstal ulang Visual Studio 2010 itu berjalan dengan baik.

Lihat Menghapus Instalasi Visual Studio 11 sepenuhnya untuk melakukan instalasi baru .

AlonSamuel
sumber
3
Konfirmasikan !!!!!!! Hanya menginstal ulang VC2010 tidak membantu. Setelah penghapusan framework4.5 RC tidak apa-apa.
inkooboo
Saya menginstal umdh yang menginstal .net 4.5 yang merusak visual studio 2010. setelah menghapus instalan .net 4.5 dan menginstal ulang .net 4.0 studio visual saya hidup kembali.
stu
14

Bagi saya, pengaturan 'Buat Manifes' menjadi 'Tidak' memperbaikinya. (Juga diperbaiki dengan / INCREMENTAL: TIDAK)

FractalSpace
sumber
14

Jika Anda menggunakan x64, berikut ini sumber yang akan membantu :

Ini terjadi karena Microsoft .NET 4.5 tidak kompatibel dengan Visual C ++ 10. Solusinya adalah untuk memastikan bahwa Anda menjalankan .NET versi cvtres.exe daripada versi Visual C ++. Saya melakukan ini dengan mengganti nama versi Visual C ++ dari file-file itu dan menyalin versi .NET di tempatnya.

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
Richard Peck
sumber
1
Catatan: ini berfungsi karena keduanya .NET Framework 4 Multi-targeting pack dan .NET Framework 4.5.2 diinstal. File itu C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exemilik .NET Framework 4 Multi-targeting pack. Ini umumnya akan terjadi jika Anda telah menginstal Windows SDK 7.1 dan kemudian .NET diperbarui ke 4.5.2. Dalam hal ini, biasanya Anda dapat hanya mengubah nama C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exeuntuk cvtres-old.exedan baru cvtres.exe(tanggal 8/30/17) akan digunakan dan bekerja dengan baik.
David C. Rankin
13

Saya akhirnya memecahkan masalah ini dengan melakukan uninstall penuh VS2012 RC, diikuti dengan uninstall penuh VS2010, kemudian instal ulang dari awal VS2010.

Butuh selamanya, tapi saya sekarang dapat mengkompilasi proyek C ++ di VS2010 lagi.

Orion Edwards
sumber
11

Masalah ini secara ajaib diselesaikan untuk saya dengan menghapus .NET 4.5, dan menggantinya dengan .NET 4.0 . Saya kemudian harus memperbaiki Visual Studio 2010 - entah bagaimana rusak.

Saya sebelumnya telah menginstal, dan kemudian tidak diinstal, Visual Studio 2012 - yang mungkin terkait dengan masalah ini.

Ulat
sumber
2
Ini berhasil untuk saya. Saya mendapat Net 4.5 sebagai Pembaruan Windows yang penting. Saya baru saja mencopotnya, yang membuat pembangunan gagal dengan cara baru. Kemudian saya sepenuhnya memperbaiki instalasi Visual Studio 2010 Express , dan itu memperbaiki masalah.
hyde
10

Saya belum menginstal Visual Studio 2012, tapi saya masih mendapatkan kesalahan ini di Visual Studio 2010. Saya mendapatkan ini diselesaikan setelah menginstal Visual Studio 2010 SP1.

Saji
sumber
9

Saya memiliki masalah yang sama dengan Microsoft Visual Studio 2010 Ultimate dan diselesaikan dengan metode yang dijelaskan dalam video youtube ini

Video menyarankan untuk mengganti nama file cvtres.exe di C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) untuk cvtres-old.exe

Sepideh Abadpour
sumber
6

+1 untuk pengguna Short untuk jawaban yang berfungsi untuk saya!

Saya mencoba melakukan debugging dengan ini msbuild /v:diag, dan saya melihat bahwa MSBuild mencoba untuk menanamkan manifes dalam executable, dengan <somename> .dll.embed.manifest.res pada baris perintah linker, di mana itu adalah sumber daya file dibangun dari <somename> .dll.embed.manifest. Tetapi file manifes adalah file teks Unicode kosong. (Yaitu, file dua byte dengan awalan Unicode 0xFEFF)

Jadi masalah root tampaknya ada hubungannya dengan file manifes yang tidak dihasilkan, atau sedang digunakan ketika <somename> .dll.intermediate.manifest seharusnya digunakan.

Solusi alternatif tampaknya untuk mematikan opsi "Embed Manifest" di bawah Properties, Manifest Tool, Input dan Output.

Mati di Sente
sumber
6

Itu tidak berfungsi untuk saya setelah Mengaktifkan Penautan Tambahan -> "Tidak (/ INCREMENTAL: TIDAK)", tetapi itu berfungsi untuk saya setelah saya menghapus file rc.

robin.lo
sumber
5

Untuk meringkas:

Step1

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

jika step1 tidak berfungsi, lakukan Step2

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

jika step2 tidak berfungsi, lakukan Step3 Salin file salah satu dari:

  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

    Kemudian, ganti ke C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Dengan saya, lakukan 3 langkah kerjanya

Hung Pham
sumber
4

Pada Januari 2014, untuk beberapa alasan saya menginstal .NET Framework 4.5.1, saya tidak tahu apakah karena instalasi perangkat lunak pihak ketiga atau karena pembaruan otomatis.

Pada tanggal 29 Januari, saya menginstal satu komponen dan saya mulai menerima

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

pesan. Pada saat itu, saya menyelesaikannya dengan menghindari tautan tambahan.

Pada 31 Januari, saya menginstal komponen lain dari .NET Framework 4.5.1 dan trik tautan tambahan tidak berfungsi lagi. Saya kemudian menginstal Visual Studio 2010 SP1, tetapi setelah itu masalahnya menjadi:

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

Saya pikir SP1 mengacaukan instalasi Visual Studio 2010 saya.

Jadi saya menghapus .NET Framework 4.5.1, menginstal .NET Framework 4.0 dan menghapus lalu menginstal ulang Visual Studio 2010. Itu bekerja untuk saya.

JackOLantern
sumber
3

Meskipun menginstal Paket Layanan Anda mendapatkan kesalahan kemudian mencoba menghapus / mengganti nama cvtres.exe di C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin folder. Ini berhasil bagi saya.

kutu buku
sumber
Ini berhasil untuk saya. Tapi saya tidak mengerti bagaimana ini menjadi masalah. Akan sangat dihargai jika Anda bisa memberi tahu saya. Terima kasih.
DTdev
2
Dalam jawaban di bawah ini, @Rich Peck telah menjelaskan alasan perilaku ini.
kutu buku
1

Saya menyetel Aktifkan Penambahan Bertautan ke "Tidak (/ INCREMENTAL: TIDAK)" dan itu tidak berfungsi untuk saya .

Selanjutnya saya sudah berubah:

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

dan itu bekerja untuk saya :)

sma6871
sumber
Ini tidak akan berfungsi jika Anda perlu membuat executable yang dapat di-debuggable pada platform WinXP.
Jay Elston
maaf tapi ini bukan solusi..anda mengubah toolset yang merupakan kompiler yang sama sekali berbeda
Semih Ozmen
1

Menginstal ulang CMake berfungsi untuk saya. Salinan CMake baru menemukan bahwa ia harus menggunakan Visual Studio 11 bukan 10.

naroom
sumber
1

Saya menggunakan Windows SDK untuk pemrograman inti Win32 dan .NET 4.5 diinstal untuk alasan "tidak diketahui". Saya telah menghapus instalan itu dan menginstal 4.0 seperti jawaban sebelumnya dan ya, itu juga berhasil untuk saya.

Hanya terperangah bahwa saya harus menggunakan .NET framework yang tidak berguna untuk membangun aplikasi Win32 menggunakan SDK.

Vijay Kumar Kanta
sumber
1

Saya memecahkan ini dengan melakukan hal berikut:

  1. Di prompt perintah, ketik msconfig dan tekan enter.
  2. Klik tab layanan.
  3. Cari "Pengalaman Aplikasi" dan beri tanda centang (yaitu, pilih ini untuk mengaktifkan).
  4. Klik OK. Dan restart jika perlu.

Dengan demikian masalahnya akan hilang selamanya. Bangun secara acak dan debug proyek C ++ Anda tanpa gangguan.

Aplikasi Kerja
sumber
Anda juga dapat mengaktifkan layanan Applicaton Experienc dari services.msc
App Work
2
Apa yang dilakukan ini untuk menyelesaikan masalah?
mabraham
1

Bagi Anda yang mencari solusi untuk masalah ini dengan contoh kode sumber OpenGL SuperBible 6, solusinya adalah membangun dalam Release bukannya Debug . Semua proyek telah menonaktifkan opsi tautan tambahan di versi Rilis .

Gallo
sumber
1

Masalah saya adalah bahwa saya memiliki dua jalur di PC yang berisi pustaka yang sama. Kedua jalur ditambahkan ke Direktori Perpustakaan Tambahan di Properti Konfigurasi -> Linker -> Umum . Menghapus salah satu jalur memecahkan masalah.

mihai
sumber
1

Saya memiliki masalah yang sama setelah memperbarui .NET: Saya mencopot kerangka .NET terlebih dahulu, mengunduh studio visual dari visualstudio.com dan memilih "perbaikan".

Kerangka NET dipasang secara otomatis dengan studio visual -> dan sekarang berfungsi dengan baik!

Aleksandr Khomenko
sumber
1

Saya mencoba beberapa kali dan akhirnya menyelesaikan masalah dengan menghapus beberapa kali VS2010. Saya pikir saya belum menghapus semua file dan itu sebabnya itu tidak berfungsi untuk pertama kalinya.

Dalam instalasi VS2012, dikatakan bahwa jika Anda memiliki VS2010 SP1 Anda tidak dapat bekerja pada proyek yang sama di kedua program. Disarankan hanya memiliki satu program.

Terima kasih!

Pembalasan
sumber
1

Saya punya masalah ini setelah saya menginstal Visual Studio 2017 dan .NET Framework 4.6 pada mesin yang sebelumnya memiliki Visual Studio 2010.

Masalahnya adalah setelah instalasi seperti itu, file msvcr100_clr0400.dll dari C: \ Windows \ System32 ditimpa dengan yang baru dengan ukuran yang sangat kecil ~ 19 Kb, namun yang sebelumnya ~ 800 Kb.

Setelah saya memulihkan file secara manual dari cvtres.exe mesin build lain mulai bekerja dengan baik lagi.

Alexander Samoylov
sumber