Hata 'LINK: önemli hata LNK1123: COFF'a dönüştürme sırasında hata: dosya geçersiz veya bozuk' Visual Studio 2012 Release Preview yüklendikten sonra


535

Visual Studio 2012 Release Preview yükledim ve iyi görünüyor, ama şimdi C ++ projeleri derlemek için Visual Studio 2010 kullanmaya çalıştığınızda, aşağıdaki hata iletisini alıyorum:

LINK: önemli hata LNK1123: COFF'a dönüşüm sırasında hata: dosya geçersiz veya bozuk

Bundan% 100 emin değilim, ama içinde .rc(kaynak) dosyaları olan projelerle ilgili gibi görünüyor .

Program Ekle / Kaldır'dan ve yeniden başlatmadan Visual Studio 2010'u onarmayı denedim, ancak bunun bir etkisi yok.

Visual Studio 2010 araç setini kullanmak üzere ayarlandığında C ++ projelerini derlemek için Visual Studio 2012 RC kullanırsam da aynı hatayı alıyorum. Visual Studio 2011 araç setine yükseltmek sorunu giderir (ama elbette bunu üretim kodu için yapmak istemiyorum).

Güncelleştirme: Visual Studio 2012'yi kaldırdım , yeniden başlattım ve sorun devam ediyor! Yardım!


Bu bir x86 sorunu, x64 sorunu veya her ikisi mi? 32 bit işletim sisteminde görüyorum. 64-bit işletim sisteminde gördüğümü hatırlamıyorum.
jww

Yanıtlar:


652

Bu MSDN iş parçacığı nasıl düzeltileceğini açıklar.

Özetlemek:

  • Ya artımlı bağlantıyı devre dışı bırakarak

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • veya VS2010 SP1'i yükleyin.

Düzenlemeler (@CraigRinger): VS 2010 SP1'in yüklenmesinin 64 bit derleyicileri kaldıracağını unutmayın . Geri almak için VS 2010 SP1 derleyici paketini yüklemeniz gerekir .

Bu etkiler , Windows 7 ve .NET 4.0 için Microsoft Windows SDK 7.1 yanı sıra Visual Studio 2010 .


1
Net 4.5 yükledikten hemen sonra bu sorunla karşılaştım. VS2010 SP 1'in yüklenmesi sorunu çözdü. VS 2012'yi hiçbir noktada kurmadım.
KJAWolf

2
CMakefile ile artımlı bağlantıyı devre dışı bırakmak için: cmake.org/pipermail/cmake/2010-Şubat/035174.html
Harita X

2
Visual Studio altında Qt'de .pro'nuza ekleyin: QMAKE_LFLAGS + = / INCREMENTAL: NO Benim için çalıştı
gollumullog

5
@grundic Sırala. Linkv.exe'nin bulamaması ve bunun yerine .NET 4.5'in yenisini kullanması için Win 7 SDK'sından cvtres.exe adını değiştirdik. Windows 8 SDK'sı artık komut satırı araçlarını içermiyor. Masaüstü uygulaması komut satırı araçlarını almak için şimdi en az Masaüstü Bilgisayarlar için Visual Studio 2012 Express yüklemeniz gerekiyor. Yeniden adlandırma çözümü en az yıkıcı olarak kabul edildi ve kolayca yazılabilir.
DuckPuppy

2
@ Neyse ki, bu sorunu Microsoft .Net 4.5.1'i yapı aracılarımızdan ve yeni yükleme .Net 4.0'dan tamamen kaldırarak çözdük. Ondan sonra Microsoft SDK 7.0'ı yeniden işaretledik ve tüm seçenekleri işaretledik - bu sorunlarımızı çözdü. Ayrıca, bu olaydan sonra, her durumda, otomatik güncellemeleri devre dışı bıraktık.
grundic

249

Artımlı bağlantıyı devre dışı bırakmak sizin için işe yaramazsa ve "Bildirimi Yerleştir" i kapatmak da çalışmazsa, CVTRES.exe dosyasının birden çok sürümünü arayın.

/ VERBOSE linker seçeneği ile hata ayıklama yoluyla cvtres çağırmak çalıştı ve başarısız olduğunda linker bu hata mesajı yazıyor bulundu.

Yolumda bu yardımcı programın iki sürümünün olduğu ortaya çıktı. Biri C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exebir diğeri C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. VS2012 yüklendikten sonra cvtres.exe'nin VS2010 sürümü artık çalışmaz. Yolunuzdaki ilk dosyaysa ve bağlayıcı bir .res dosyasını COFF nesne biçimine dönüştürmesi gerektiğine karar verirse, bağlantı LNK1123 ile başarısız olur.

(Hata mesajının gerçek sorunla ilgisi olmaması gerçekten can sıkıcıdır, ancak bu bir Microsoft ürünü için olağandışı değildir.)

Yardımcı programın eski sürümünü silin / yeniden adlandırın ya da PATH değişkeninizi yeniden düzenleyin, böylece çalışan sürüm önce gelir.

X64 takım yapıları C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64için başka bir yerin nerede olduğunu da kontrol etmeniz gerekebileceğini unutmayın cvtres.exe.


3
Benim için çalıştı. / VERBOSE ile ilgili ipucu eklediğiniz için teşekkür ederiz.
M Katz

1
Framework dizinindeki daha yeni dosyayı visual studio dizinindeki eskisinin üzerine kopyalamanız yeterlidir.
Yochai Timmer

Bu da sorunumu çözdü. Hangi cvtres.exe ilk komut satırından çalıştı onaylamak mümkün böylece sıkı UAC olan bir bilgisayar üzerinde çalışıyorum. İlk nerede cvtres.exe koştu. Sonra "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / ayrıntılı / out:" Ayrıntılı çıktıdan ad "/ salt okunur FileFromVerboutput.res. Bir yol bir hata gösterdi, .NET biri çalıştı
user176692

50

Sürümünü kontrol edin cvtrs.exe:

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

Yanlış sürümü:
date: 2010/03/18
time: 01:16
size: 31048 bayt
name: cvtres.exe

Doğru sürüm::
date02/21/2011
time: 06:03 PM
size: 31.056 bayt
name: cvtres.exe

Yanlış sürüme sahipseniz, doğru sürümü kopyalamanız gerekir:

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

buradan değiştirin:

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

yani

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"

Bu, benzer sorunları olan diğer bazı insanlara yardımcı olabilir. Ms build kullanıyorum ve bu dosyaları kopyalamak zorunda kaldım: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE C: \ Program Files ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin buna ek olarak, i-am-bryan.com/webs/tutorials/… uyarınca
Kell

Bu benim için çalıştı, ama benim "doğru" cvtres.exe dosya farklı bir boyut, tarih, vb oldu (Yine de VS 2012 bin, olsa da)
aampere

Benim için cvtres .... Studio 10.0 \ VC \ bin \ amd64 \, dizininden yeniden adlandırılarak çözüldü. Bence intel kullanıyorum, amd
kullanmıyorum

46

MSDN forumlarında bu konuya göre: VS2012 RC kurulum sonları VS2010 C ++ projeleri , basitçe, almak cvtres.exeden VS2010 SP1

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

veya VS2012'den

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

ve üzeri kopyalamak cvtres.exeiçinde VS2010 RTM kurulumu (one SP1 olmadan )

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

Bu şekilde, cvtres.exe11.0.51106.1 olan düzeltilmiş sürümünü etkili bir şekilde kullanacaksınız .

Aracın 64 bit sürümü için de aynı adımları tekrarlayın C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Bu çözüm, VS2010 için SP1 kurulumuna bir alternatiftir - bazı durumlarda SP1'i yükleyemezsiniz (yani SP1 öncesi yapıları desteklemeniz gerekiyorsa).


1
Bu benim için çalıştı. Win7 64-bit'te olduğumdan, ilk olarak cvtres.exe'yi ... Framework64 \ v4.3 ... klasöründen kopyaladım, ancak bu sorunu çözmedi. Sonra bunu Framework \ v4.3 ... klasöründen kopyaladı ve bu sorunu çözdü TEŞEKKÜRLER !!!!!
falconK

36

Visual Studio 2012 RC'yi yüklediyseniz, .NET 4.5 RC'yi yükledi.

.NET 4.5 RC'yi kaldırın ve ihtiyacınız olan sürümü yükleyin (VS 2010 için 4.0). Bu, yaşadığınız sorunları gidermelidir.

Bu aynı sorunu çözdü. Visual Studio'yu kaldırmanıza gerek yoktur.


4
Harika!! .NET 4.5'i yalnızca .NET 4.0 ile değiştirdim. ve iyi çalışıyor !!
manutd

1
Güncelleme: .net 4.5 ve 4.0'ı kaldırmak benim için düzeltiyor (VS 2010 express). Ancak windows güncellemesi sürekli .net 4.5.1'e geri yükseliyor gibi görünüyor, bu yüzden bunu sık sık tekrarlamalıyım. Bununla birlikte, "VS 2010 SP1" ve voila, VS 2010 express'in yüklenmesi .Net 4.5.1 hala kurulu olarak da çalışıyor.
rogerdpack

15

Bunun nedeni .NET Framework 4.5'in .NET Framework 4.0'ın yerini almasıdır. Visual Studio 2010'u birkaç kez şanssız kaldırdım. .NET Framework 4.5'i kaldırıp Visual Studio 2010'u yeniden yüklediğimde iyi gitti.

Yeni bir yükleme yapmak için bkz. Visual Studio 11'i tamamen kaldırma .


3
İtiraf et !!!!!!! Sadece VC2010'u yeniden yüklemek işe yaramaz. Framework4.5 RC'nin silinmesinden sonra sorun değil.
inkooboo

Visual Studio 2010'u bozan .net 4.5'i yükleyen umdh'ı yükledim. .Net 4.5'i kaldırdıktan ve .net 4.0'ı yeniden yükledikten sonra görsel stüdyom yeniden hayata döndü.
stu

14

Benim için 'Manifest Üret' seçeneğini 'Hayır' olarak ayarlamak sorunu çözdü. (Ayrıca / INCREMENTAL: HAYIR ile sabitlenmiştir)


14

X64 kullanıyorsanız, işte size yardımcı olacak bir kaynak :

Bunun nedeni, Microsoft .NET 4.5'in Visual C ++ 10 ile uyumlu olmamasıdır. Geçici çözüm, Visual C ++ sürümü yerine cvtres.exe'nin .NET sürümünü çalıştırmanızı sağlamaktır. Bunu, bu dosyaların Visual C ++ sürümlerini yeniden adlandırarak ve .NET sürümlerini kopyalayarak yaptım.

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
Not: Her iki nedeni bu işleri .NET Framework 4 Multi-targeting pack ve .NET Framework 4.5.2 yüklenir. Dosya C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exeait .NET Framework 4 Multi-targeting pack. Windows SDK 7.1'i yüklediyseniz ve daha sonra .NET'in 4.5.2'ye güncellendiği durum genellikle budur. Bu durumda, genel olarak basitçe yeniden adlandırabilir C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exeiçin cvtres-old.exeve daha yeni cvtres.exe(8/30/17 tarihli) kullanılacak ve iyi çalışıyor.
David C. Rankin

13

Bu sorunu sonunda VS2012 RC'nin tamamen kaldırılmasını, ardından VS2010'un tamamen kaldırılmasını, ardından VS2010'un sıfırdan yeniden yüklenmesini sağlayarak çözdüm.

Sonsuza dek sürdü, ama şimdi VS2010'da C ++ projelerini tekrar derleyebiliyorum.


11

Sorun sihirli kaldırarak benim için çözüldü .NET 4.5 ve onunla değiştirme .NET 4.0 . Sonra Visual Studio 2010 onarmak zorunda - bir şekilde yol boyunca bozuk.

Bu sorunla ilgili olabilen Visual Studio 2012'yi daha önce yükledim ve sonra da kaldırdım.


2
Bu benim için çalıştı. Net 4.5'i önemli Windows Update olarak aldım. Sadece kaldırdım, bu da yapının yeni bir şekilde başarısız olmasını sağladı. Sonra Visual Studio 2010 Express yüklemesini tam olarak onardım ve bu sorunu çözdü.
hyde

10

Visual Studio 2012 yüklemedim, ancak yine de Visual Studio 2010'da bu hatayı aldım. Visual Studio 2010 SP1'i yükledikten sonra bu sorunu çözdüm.


9

Microsoft Visual Studio 2010 Ultimate ile aynı sorunu yaşadım ve bu youtube videosunda açıklanan yöntemle çözüldü

Video dosyası yeniden adlandırmak önerir cvtres.exe içinde C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) kadar cvtres-old.exe


6

+ 1 kullanıcı Kısa benim için çalışan bir cevap için kısa !

Bu ile bazı hata ayıklama yapmaya çalıştım msbuild /v:diagve MSBuild , bu bir kaynak olduğu linker komut satırında <somename> .dll.embed.manifest.res ile yürütülebilir bir manifest katıştırmaya çalıştığını görüyorum <somename> .dll.embed.manifest dosyasından oluşturulmuş dosya. Ancak bildirim dosyası boş bir Unicode metin dosyasıdır. (Yani, Unicode 0xFEFF önekine sahip iki baytlık bir dosya)

Bu nedenle, kök sorununun bu manifest dosyası oluşturulmadığı veya <somename> .dll.intermediate.manifest kullanıldığında kullanılmasıyla ilgili bir şeyleri var gibi görünüyor.

Alternatif bir çözüm, Özellikler, Manifest Aracı, Girdi ve Çıktı altında "Manifest Göm" seçeneğini kapatmak gibi görünüyor.


6

Artımlı Bağlamayı Etkinleştir -> "Hayır (/ INCREMENTAL: NO)" dan sonra benim için çalışmadı, ancak rc dosyasını sildikten sonra benim için çalışıyor.


5

Özetlemek:

Step1

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

1. adım çalışmıyorsa 2. Adım yapın

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

2. adım işe yaramazsa, 3. Adım Dosyayı aşağıdakilerden birini yapın:

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

    Sonra, C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe olarak değiştirin.


4

Ocak 2014 itibariyle, bazı nedenlerden dolayı .NET Framework 4.5.1'i yükledim, üçüncü taraf bir yazılım yüklemesi veya otomatik güncelleme nedeniyle bilmiyorum.

29 Ocak'ta bir bileşen yükledim ve

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

İleti. O zaman, artımlı bağlantıdan kaçınarak çözdüm.

31 Ocak'ta .NET Framework 4.5.1'in başka bir bileşenini yükledim ve artımlı bağlantı hilesi artık çalışmadı. Daha sonra Visual Studio 2010 SP1'i yükledim, ancak daha sonra sorun oldu:

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

SP1'in Visual Studio 2010 kurulumumu bozduğunu düşünüyorum.

Bu yüzden .NET Framework 4.5.1'i kaldırdım, .NET Framework 4.0'ı yükledim ve sonra Visual Studio 2010'u yeniden yükledim. Bu benim için çalıştı.


3

Hizmet paketini yüklemeye rağmen hata alıyorsunuz ve sonra C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin klasöründeki cvtres.exe dosyasını kaldırmayı / yeniden adlandırmayı deneyin. Bu benim için çalıştı.


Benim için çalıştı. Ama bunun nasıl bir sorun olduğunu anlamadım. Bana söyleyebilirsen sevinirim. Teşekkürler.
DTdev

2
Aşağıdaki cevapta @Rich Peck bu davranışın nedenini açıkladı.
inek

1

Ben set Artan Bağlama Enable için "Hayır (/ eklemeli: HAYIR)" ve benim için iş yapmaz .

Sonra değiştirdim:

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

ve benim için çalışıyor :)


Bir WinXP platformunda hata ayıklanabilir bir yürütülebilir dosya oluşturmanız gerekiyorsa bu çalışmaz .
Jay Elston

Üzgünüm ama bu tamamen farklı bir derleyici bir solution..you değişiyor araç grubu değildir
Semih Özmen

1

CMake'i yeniden yüklemek benim için çalıştı. CMake'nin yeni kopyası, 10 yerine Visual Studio 11 kullanması gerektiğini anladı.


1

Çekirdek Win32 programlama için Windows SDK kullanıyordum ve "bilinmeyen" nedenlerle .NET 4.5 yüklü vardı. Bunu kaldırdım ve önceki yanıtlar gibi 4.0 yükledim ve evet, benim için de çalıştı.

Sadece SDK kullanarak Win32 uygulamaları oluşturmak için işe yaramaz .NET framework kullanmak zorunda olduğunu şaşkın.


1

Bunu aşağıdakileri yaparak çözdüm:

  1. Komut istemine msconfig yazın ve enter tuşuna basın.
  2. Hizmetler sekmesini tıklayın.
  3. "Uygulama Deneyimi" ni arayın ve onay işareti koyun (etkinleştirmek için bunu seçin).
  4. Tamam'ı tıklayın. Ve gerekirse yeniden başlatın.

Böylece sorun sonsuza dek sürecek. Rastgele inşa edin ve C ++ projelerinizde herhangi bir rahatsızlık olmadan hata ayıklayın.


Uygulama Deneyimi hizmetini services.msc adresinden de etkinleştirebilirsiniz
App Work

2
Bu sorunu çözmek için ne yapıyor?
mabraham

1

OpenGL SuperBible 6. kaynak kod örnekleri ile bu soruna bir çözüm arayanlar için, çözüm Debug yerine Release'de oluşturuluyor . Tüm projeler, Yayın sürümündeki artımlı bağlantı seçeneğini devre dışı bıraktı .


1

Benim sorunum bilgisayarımda aynı kütüphaneleri içeren iki yol vardı. Her iki yol da eklendi Ek Kütüphane Dizinler içinde > Bağlayıcı - -> Genel Yapılandırma özellikleri . Yollardan birini kaldırmak sorunu çözdü.



1

Birkaç kez denedim ve sonunda VS2010'u birkaç kez kaldırarak sorunu çözdüm. Sanırım tüm dosyaları kaldırmamıştım ve bu yüzden ilk kez çalışmadı.

VS2012 kurulumunda, VS2010 SP1'iniz varsa, her iki programda da aynı proje üzerinde çalışamayacağınız söylenir. Yalnızca bir programa sahip olmanız önerilir.

Teşekkürler!


1

Daha önce Visual Studio 2010 olan makineye Visual Studio 2017 ve .NET Framework 4.6 yükledikten sonra bu sorunla karşılaştım.

Sorun böyle bir kurulumdan sonra msvcr100_clr0400.dll dosyasının C: \ Windows \ System32'den çok küçük boyutlu ~ 19 Kb ile yenisiyle yazılması, ancak eski ~ 800 Kb idi.

Dosyayı başka bir derleme makinesinden el ile geri yükledikten sonra cvtres.exe tekrar düzgün çalışmaya başladı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.