Fout ‘LINK: fatale fout LNK1123: fout tijdens conversie naar COFF: bestand ongeldig of beschadigd’ na installatie van Visual Studio 2012 Release Preview

Ik heb Visual Studio 2012 Release Preview geïnstalleerd en het lijkt in orde te zijn, maar als ik nu Visual Studio 2010 probeer te gebruiken om C++-projecten te compileren, krijg ik de volgende foutmelding:

LINK: fatale fout LNK1123: fout tijdens conversie naar COFF: bestand ongeldig of beschadigd

Ik ben hier niet 100% zeker van, maar het lijkt verband te houden met projecten die .rc(resource)-bestanden bevatten.

Ik heb geprobeerd Visual Studio 2010 te repareren via Programma’s toevoegen/verwijderen en opnieuw op te starten, maar dit heeft geen effect.

Ik krijg dezelfde fout ook als ik Visual Studio 2012 RC gebruik om de C++-projecten te compileren wanneer ik de toolset van Visual Studio 2010 gebruik. Upgraden naar de toolset van Visual Studio 2011 lost het probleem op (maar ik wil dit natuurlijk niet doen voor productiecode).

Update: ik heb Visual Studio 2012 verwijderd, opnieuw opgestart en het probleem blijft bestaan! Help!


Antwoord 1, autoriteit 100%

Deze MSDN-thread legt uit hoe je dit kunt oplossen.

Om samen te vatten:

  • Schakel incrementeel koppelen uit door naar

    . te gaan

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

Bewerkingen (@CraigRinger): Houd er rekening mee dat het installeren van VS 2010 SP1 de 64-bits compilers zal verwijderen. U moet de VS 2010 SP1 compiler packom ze terug te krijgen.

Dit is van invloed op Microsoft Windows SDK 7.1 voor Windows 7 en .NET 4.0en ook op Visual Studio 2010.


Antwoord 2, autoriteit 39%

Als het uitschakelen van incrementeel koppelen niet voor u werkt en het uitschakelen van “Manifest insluiten” ook niet werkt, zoek dan in uw pad naar meerdere versies van CVTRES.exe.

Door te debuggen met de /VERBOSE linker-optie ontdekte ik dat de linker die foutmelding aan het schrijven was toen hij probeerde cvtres op te roepen en dat mislukte.

Het bleek dat ik twee versies van dit hulpprogramma op mijn pad had. Een op C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exeen een op C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Na de installatie van VS2012 zal de VS2010-versie van cvtres.exe niet meer werken. Als dat de eerste op je pad is en de linker besluit dat het een .res-bestand moet converteren naar COFF-objectformaat, zal de link mislukken met LNK1123.

(Heel vervelend dat de foutmelding niets te maken heeft met het eigenlijke probleem, maar dat is niet ongebruikelijk voor een Microsoft-product.)

Verwijder/hernoem gewoon de oudere versie van het hulpprogramma, of herschik uw PATH-variabele, zodat de versie die werkt als eerste komt.

Houd er rekening mee dat u voor x64-tooling-builds mogelijk ook C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64moet controleren waar er nog een cvtres.exe.


Antwoord 3, autoriteit 8%

Controleer de versie van cvtrs.exe:

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

Verkeerde versie:
date: 18-03-2010
time: 13:16
size: 31.048 bytes
name: cvtres.exe

Correcte versie:
date: 21/02/2011
time: 18:03
size: 31.056 bytes
name: cvtres.exe

Als je een verkeerde versie hebt, moet je de juiste versie kopiëren van:

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

en vervang deze hier:

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

d.w.z.

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"

Antwoord 4, autoriteit 7%

Volgens deze thread in MSDN-forums: VS2012 RC-installatie breekt VS2010 C++-projecten, gewoon, neem cvtres.exevan VS2010 SP1

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

of van VS2012

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

en kopieer het over de cvtres.exein VS2010 RTMinstallatie (die zonder SP1)

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

Op deze manier gebruikt u effectief de gecorrigeerde versie van cvtres.exe, namelijk 11.0.51106.1.

Herhaal dezelfde stappen voor de 64-bits versie van het hulpprogramma in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

>

Deze oplossing is een alternatief voor de installatie van SP1 voor VS2010 – in sommige gevallen kunt u SP1 gewoon niet installeren (d.w.z. als u pre-SP1-builds moet ondersteunen).


Antwoord 5, autoriteit 6%

Als u Visual Studio 2012 RC hebt geïnstalleerd, heeft het .NET 4.5 RC geïnstalleerd.

Verwijder .NET 4.5 RC en installeer de versie die u nodig hebt (4.0 voor VS 2010). Dit zou eventuele problemen moeten oplossen.

Dit loste hetzelfde probleem op. Het is niet nodig om Visual Studio te verwijderen.


Antwoord 6, autoriteit 2%

Het komt doordat .NETFramework 4.5 .NET Framework 4.0 vervangt.
Ik heb Visual Studio 2010 meerdere keren zonder geluk verwijderd. Toen ik .NET Framework 4.5 verwijderde en Visual Studio 2010 opnieuw installeerde, ging het prima.

Zie Visual Studio 11 volledig verwijderen om te doen een nieuwe installatie.


Antwoord 7, autoriteit 2%

Voor mij loste het instellen van ‘Manifest genereren’ op ‘Nee’ het op. (Ook opgelost met /INCREMENTAL:NO)


Antwoord 8, autoriteit 2%

Als je x64 gebruikt, hier is een hulpmiddel dat helpt:

Dit gebeurt omdat Microsoft .NET 4.5 niet compatibel is met Visual C++ 10. De tijdelijke oplossing is ervoor te zorgen dat u de .NET-versie van cvtres.exe uitvoert in plaats van de Visual C++-versie. Ik deed dit door de Visual C++-versies van die bestanden te hernoemen en de .NET-versies op hun plaats te kopiëren.

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

Antwoord 9, autoriteit 2%

Ik heb dit probleem uiteindelijk opgelost door VS2012 RC volledig te verwijderen, gevolgd door VS2010 volledig te verwijderen en vervolgens VS2010 helemaal opnieuw te installeren.

Het duurde een eeuwigheid, maar ik kan nu weer C++-projecten compileren in VS2010.


Antwoord 10, autoriteit 2%

Het probleem is voor mij op magische wijze opgelost door .NET4.5 te verwijderen en te vervangen door .NET 4.0. Ik moest toen Visual Studio 2010 repareren – het was onderweg op de een of andere manier beschadigd.

Ik had eerder Visual Studio 2012 geïnstalleerd en daarna gedeïnstalleerd, wat mogelijk verband houdt met het probleem.


Antwoord 11, autoriteit 2%

Ik heb Visual Studio 2012 niet geïnstalleerd, maar ik krijg nog steeds deze fout in Visual Studio 2010. Ik heb dit opgelost na het installeren van Visual Studio 2010 SP1.


Antwoord 12, autoriteit 2%

Ik had hetzelfde probleem met Microsoft Visual Studio 2010 Ultimateen het is opgelost met de methode die wordt beschreven in deze YouTube-video

De video stelt voor om het bestand cvtres.exete hernoemen in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin(in my Win7X64 matchine)naar cvtres-old.exe


Antwoord 13

Het werkte niet voor mij na Incrementele koppeling inschakelen -> “Nee (/INCREMENTAL:NO)”, maar het werkt voor mij nadat ik het rc-bestand heb verwijderd.


Antwoord 14

+1 voor gebruiker Afkorting voor een antwoorddat voor mij werkte!

Ik heb geprobeerd dit op te lossen met msbuild /v:diag, en ik zie dat MSBuildprobeert een manifest in te sluiten in het uitvoerbare bestand, met <somename>.dll.embed.manifest.res op de linker-opdrachtregel, waar dat een bronbestand is dat is opgebouwd uit &lt ;eennaam>.dll.embed.manifest. Maar het manifestbestand is een leeg Unicode-tekstbestand. (Dat wil zeggen, een bestand van twee bytes met het Unicode 0xFEFF-voorvoegsel)

Dus het rootprobleem lijkt iets te maken te hebben met het feit dat dat manifestbestand niet wordt gegenereerd, of dat het wordt gebruikt terwijl <somename>.dll.intermediate.manifest had moeten worden gebruikt.

Een alternatieve oplossing lijkt te zijn om de optie “Manifest insluiten” uit te schakelen onder Eigenschappen, Manifest-tool, Invoer en Uitvoer.


Antwoord 15

Om samen te vatten:

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

als stap1 niet werkt, voer dan stap2 uit

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

als stap2 niet werkt, voer dan stap3 uit
Kopieer bestand een van:

  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

    Vervang vervolgens naar C:\Program Files (x86)\Microsoft Visual Studio
    10.0\VC\bin\cvtres.exe
    Met mij, doe 3 stappen het werkt


Antwoord 16

Sinds januari 2014 kreeg ik om de een of andere reden .NET Framework 4.5.1 geïnstalleerd, ik weet niet of dit komt door een software-installatie van een derde partij of door een automatische update.

Op 29 januari kreeg ik één onderdeel geïnstalleerd en kreeg ik de

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

bericht. Op dat moment heb ik het opgelost door de incrementele link te vermijden.

Op 31 januari kreeg ik een ander onderdeel van .NET Framework 4.5.1 geïnstalleerd en de incrementele link-truc werkte niet meer. Ik heb toen Visual Studio 2010 SP1 geïnstalleerd, maar daarna werd het probleem:

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

Ik denk dat de SP1 mijn Visual Studio 2010-installatie in de war heeft gebracht.

Dus ik heb .NET Framework 4.5.1 verwijderd, .NET Framework 4.0 geïnstalleerd en Visual Studio 2010 verwijderd en opnieuw geïnstalleerd. Dat werkte voor mij.


Antwoord 17

Zelfs ondanks het installeren van het Servicepack krijgt u de foutmelding en probeer dan de cvtres.exe te verwijderen/hernoemen in de map C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin. Dit heeft voor mij gewerkt.


Antwoord 18

Ik heb Incrementele koppeling inschakeleningesteld op “Nee (/INCREMENTAL:NO)”en het werkt niet voor mij.

Volgende heb ik gewijzigd:

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

en het werkt voor mij 🙂


Antwoord 19

Het opnieuw installeren van CMake werkte voor mij. Het nieuwe exemplaar van CMake ontdekte dat het Visual Studio 11 moest gebruiken in plaats van 10.


Antwoord 20

Ik gebruikte de Windows SDK voor kernprogrammering van Win32 en had .NET 4.5 geïnstalleerd om “onbekende” redenen. Ik heb dat verwijderd en 4.0 geïnstalleerd zoals eerdere antwoorden en ja, het werkte ook voor mij.

Ik ben gewoon stomverbaasd dat ik het nutteloze .NET-framework moest gebruiken voor het bouwen van Win32-apps met de SDK.


Antwoord 21

Ik heb dit opgelost door het volgende te doen:

  1. Typ msconfig in een opdrachtprompt en druk op enter.
  2. Klik op het tabblad Services.
  3. Zoek naar “Applicatie-ervaring” en plaats een vinkje (selecteer dit om in te schakelen).
  4. Klik op OK. En herstart indien nodig.

Het probleem zal dus voor altijd blijven bestaan. Bouw willekeurig en debug uw C++-projecten zonder enige storing.


Antwoord 22

Voor degenen onder u die op zoek zijn naar een oplossing voor dit probleem met de OpenGL SuperBible 6e broncodevoorbeelden, de oplossing is het inbouwen van Releasein plaats van Debug. Alle projecten hebben de optie voor incrementeel koppelen uitgeschakeld in de versie Release.


Antwoord 23

Mijn probleem was dat ik twee paden op mijn pc had die dezelfde bibliotheken bevatten. Beide paden zijn toegevoegd aan de Extra bibliotheekmappenin Configuratie-eigenschappen -> Linker -> Algemeen. Het verwijderen van een van de paden loste het probleem op.


Antwoord 24

Ik had hetzelfde probleem na het updaten van .NET:
Ik heb eerst het .NET-framework verwijderd,
visual studio gedownload van visualstudio.comen geselecteerd “reparatie”.

NET framework werden automatisch geïnstalleerd met visual studio -> en nu werkt het prima!


Antwoord 25

Ik heb het een paar keer geprobeerd en heb het probleem uiteindelijk opgelost door de VS2010 verschillende keren te verwijderen. Ik denk dat ik niet alle bestanden had verwijderd en daarom werkte het voor de eerste keer niet.

In de installatie van VS2012 wordt gezegd dat als je VS2010 SP1 hebt, je niet in beide programma’s aan hetzelfde project kunt werken. Het wordt aanbevolen om slechts één programma te hebben.

Bedankt!


Antwoord 26

Ik had dit probleem nadat ik Visual Studio 2017 en .NET Framework 4.6 had geïnstalleerd op de machine die voorheen Visual Studio 2010 had.

Het probleem was dat na zo’n installatie het bestand msvcr100_clr0400.dllvan C:\Windows\System32 werd overschreven met de nieuwe met een zeer kleine grootte van ~19 Kb, maar de vorige was ~800 Kb.

Nadat ik het bestand handmatig vanaf een andere build-machine had hersteld, werkte cvtres.exe weer correct.

Other episodes