Помилка 'LINK: фатальна помилка LNK1123: збій під час перетворення в COFF: файл недійсний або пошкоджений' після встановлення Visual Studio 2012 Preview Preview


535

Я встановив програму Visual Studio 2012 Release Preview, і, здається, це добре, але тепер, коли я намагаюся використовувати Visual Studio 2010 для компіляції проектів C ++, я отримую таке повідомлення про помилку:

ЛІНК: фатальна помилка LNK1123: збій під час перетворення в COFF: файл недійсний або пошкоджений

Я не впевнений у цьому на 100%, але, здається, це пов'язано з проектами, які мають у собі .rc(ресурсні) файли.

Я намагався відремонтувати Visual Studio 2010 з програми «Додати / видалити» та перезавантажити, але це не впливає.

Я також отримую таку ж помилку, якщо використовую Visual Studio 2012 RC для компіляції проектів C ++, коли встановлено використовувати набір інструментів Visual Studio 2010. Оновлення до набору інструментів 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 .

Це впливає на Microsoft Windows SDK 7.1 для Windows 7 та .NET 4.0 , а також Visual Studio 2010 .


1
Я зіткнувся з цією проблемою незабаром після встановлення .Net 4.5. Встановлення VS2010 SP 1 вирішило це. Я не встановлював VS 2012 ні в якому разі.
KJAWolf

2
Щоб відключити інкрементальне посилання з CMakefile: cmake.org/pipermail/cmake/2010-February/035174.html
Карта X

2
У Qt під Visual Studio додайте до свого .pro: QMAKE_LFLAGS + = / INCREMENTAL: НІ
спрацював

5
@grundic Сортування. Ми перейменували cvtres.exe у програму Win 7 sdk, щоб link.exe не знаходив його, а замість цього використовував новий із .NET 4.5. SDK для Windows 8 більше не містить інструментів командного рядка. Тепер ви повинні встановити принаймні Visual Studio 2012 Express для Настільних ПК, щоб отримати інструменти командного рядка для настільних програм. Рішення перейменування було визнано найменш руйнівним і може бути легко скриптовано.
DuckPuppy

2
@DuckPuppy, на щастя, ми вирішили цю проблему, повністю видаливши Microsoft .Net 4.5.1 з наших агентів побудови та свіжу інсталяцію .Net 4.0. Після цього ми запустили перевстановлення Microsoft SDK 7.0 із усіма позначеними параметрами - це вирішило наші проблеми. Також після цього випадку ми відключили автоматичні оновлення - про всяк випадок.
grundic

249

Якщо відключення додаткового посилання не працює для вас, а вимкнути "Вставити маніфест" також не працює, знайдіть свій шлях у кількох версіях CVTRES.exe.

Налагоджуючи параметр / VERBOSE linker, я виявив, що лінкер пише це повідомлення про помилку, коли він намагався викликати 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 версія VS2010 cvtres.exe більше не працюватиме. Якщо це перший на вашому шляху, і лінкер вирішив, що йому потрібно перетворити .res файл у формат об'єкта COFF, посилання не вдасться з LNK1123.

(Дуже дратує, що повідомлення про помилку не має нічого спільного з реальною проблемою, але це не є незвичним для продукту Microsoft.)

Просто видаліть / перейменуйте старішу версію утиліти або переупорядкуйте змінну PATH, щоб версія, яка працює, була першою.

Майте на увазі, що для складання інструментів x64 вам також доведеться перевірити, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64де є інший cvtres.exe.


3
Працювали для мене. Дякуємо, що включили підказку про / VERBOSE, яка показує, як / чому замість того, що саме робити магічною справою.
М Кац

1
Просто скопіюйте новий каталог у каталог Framework над старим у візуальний каталог студії.
Йочай Тіммер

Це вирішило і мою проблему. Я працюю на комп’ютері зі строгим UAC, тому я зміг підтвердити, який cvtres.exe працював першим з командного рядка. Перший побіг де cvtres.exe. Тоді "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Ім'я з виводу багатослідника "/ тільки читати FileFromVerboutput.res. Один шлях показав помилку, .NET один працював
користувач176692

50

Перевірте версію cvtrs.exe:

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

Неправильна версія:
date18.03.2010
time: 13:16
size: 31,048 байт
name: cvtres.exe

Правильний варіант:
date: 02/21/2011
time: 6:03 вечора
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 build і мені довелося скопіювати ці файли: 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 на додачу до цього, відповідно до i-am-bryan.com/webs/tutorials/…
Kell

Це працювало для мене, але мій "правильний" файл cvtres.exe був різного розміру, дати тощо (все-таки з бін VS 2012, хоча)
aampere

Для мене вирішено перейменування cvtres з .... Studio 10.0 \ VC \ bin \ amd64 \, каталог. Я думаю, тому що я використовую intel, а не amd
Даніель Харі

46

Відповідно до цієї теми на форумах MSDN: Встановлення RC VS2012 перерве проекти VS2010 C ++ , просто взяти cvtres.exeз VS2010 SP1

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.exeякої 11.0.51106.1.

Повторіть ті ж самі кроки для 64-бітної версії інструменту в C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Це рішення є альтернативою встановлення SP1 для VS2010 - у деяких випадках ви просто не можете встановити SP1 (тобто, якщо вам потрібно підтримати збірки до SP1).


1
Це працювало для мене. Оскільки я перебуваю на 64-розрядному файлі win7, я спершу скопіював cvtres.exe з папки ... Framework64 \ v4.3 ..., але це не вирішило проблему. Потім скопіювали його з папки Framework \ v4.3 ... і це вирішило проблему ДЯКУЮ !!!!!
falconK

36

Якщо ви встановили Visual Studio 2012 RC, тоді він встановив .NET 4.5 RC.

Видаліть .NET 4.5 RC та встановіть потрібну вам версію (4.0 для VS 2010). Це повинно усунути будь-які проблеми у вас.

Це вирішило ту саму проблему. Немає необхідності видаляти Visual Studio.


4
Чудово !! Я лише замінив .NET 4.5 на .NET 4.0. і це чудово працює !!
манут

1
оновлення: видалення .net 4.5 і 4.0 виправляє це для мене (VS 2010 express). однак оновлення Windows, як видається, постійно оновлюється до .net 4.5.1, тому мені доводиться повторювати це так часто. Однак установка "VS 2010 SP1" та вуаля, 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

Я встановив umdh, який встановлює .net 4.5, який зламав візуальну студію 2010. Після видалення .net 4.5 та перевстановлення .net 4.0 моя візуальна студія повернулася до життя.
Ст

14

Для мене встановлення параметра "Створити маніфест" на "Ні" виправило це. (Також зафіксовано / INCREMENTAL: NO)


14

Якщо ви використовуєте x64, ось ресурс допоможе :

Це відбувається тому, що Microsoft .NET 4.5 несумісний з Visual C ++ 10. Вирішення проблеми полягає у тому, щоб забезпечити запуск версії .NET cvtres.exe, а не версію Visual C ++. Я зробив це, перейменувавши версії 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(від 30.08.17 р.) Будуть використані та працюватимуть нормально.
Девід К. Ранкін

13

Зрештою, я вирішив цю проблему, зробивши повну видалення VS2012 RC, а потім повну видалення VS2010, потім перевстановлення з нуля VS2010.

Це пройшло назавжди, але я тепер знову зможу збирати проекти C ++ у VS2010.


11

Проблема була магічно вирішена для мене, видаливши .NET 4.5 та замінивши її на .NET 4.0 . Тоді мені довелося відремонтувати Visual Studio 2010 - вона по дорозі якось пошкодилася.

Я раніше встановив, а потім не встановив Visual Studio 2012 - що може бути пов'язано з проблемою.


2
Це працювало для мене. Я отримав Net 4.5 як важливе оновлення Windows. Я просто його видалив, що змусило збільшити збій по-новому. Тоді я повністю відремонтував установку Visual Studio 2010 Express , і це вирішило проблему.
Гайда

10

Я не встановив Visual Studio 2012, але я все-таки отримав цю помилку в Visual Studio 2010. Я вирішив це після встановлення Visual Studio 2010 SP1.


9

У мене була така ж проблема з Microsoft Visual Studio 2010 Ultimate, і вона була вирішена методом, описаним у цьому відео на YouTube

У відео пропонується перейменувати файл cvtres.exe у C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) у cvtres-old.exe


6

+1 користувачеві Короткий за відповідь, яка працювала на мене!

Я спробував зробити деяку налагодження цього msbuild /v:diag, і я бачу, що MSBuild намагається вбудувати маніфест у виконуваний файл з <somename> .dll.embed.manifest.res у командному рядку linker, де це ресурс файл, побудований з <ім'я> .dll.embed.manifest. Але файл маніфесту - це порожній текстовий файл Unicode. (Тобто двобайтовий файл з префіксом Unicode 0xFEFF)

Таким чином, коренева проблема, схоже, має щось спільне з тим, що файл маніфесту не створюється, або він використовується, коли слід було використовувати <ім'я_мення> .dll.intermediate.manifest.

Альтернативним рішенням, здається, є вимкнення параметра "Вставити маніфест" у розділі Властивості, Інструмент маніфесту, Введення та Виведення.


6

Це не спрацювало для мене після ввімкнення інкрементального посилання -> "Ні (/ ІНФОРМАЦІЙНИЙ НІ)", але воно працює для мене після видалення файлу rc


5

Узагальнити:

Step1

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

якщо step1 не працює, виконайте Step2

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

якщо step2 не працює, зробіть Step3 Copy файл одним із:

  1. C: \ програмні файли (x86) \ Microsoft Visual Studio 11.0 \ VC \ bin \ cvtres.exe
  2. C: \ програмні файли (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ cvtres.exe
  3. C: \ програмні файли (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 року я чомусь встановив .NET Framework 4.5.1, я не знаю, через встановлення програмного забезпечення сторонніх виробників або автоматичне оновлення.

29 січня я встановив один компонент, і я почав отримувати

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

повідомлення. У той час я вирішив, уникаючи поступового зв’язку.

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

Навіть незважаючи на встановлення пакета оновлень, ви отримуєте помилку, тоді спробуйте видалити / перейменувати cvtres.exe у папку C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. Це працювало на мене.


Це працювало для мене. Але я не зрозумів, як це була проблема. Будемо вдячні, якщо ви можете мені сказати. Дякую.
DTdev

2
У нижченаведеній відповіді @Rich Peck пояснив причину такої поведінки.
ботанік

1

Я встановив " Увімкнути інкрементальне посилання " на "Ні (/ ІНЦЕПЦІЯ: НІ)", і це не працює для мене .

Далі я змінив:

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

і це працює для мене :)


Це не спрацює, якщо вам потрібно створити виконуваний файл, який можна відладкувати на платформі WinXP.
Джей Елстон

Вибачте, але це не рішення. Ви змінюєте набір інструментів, який є зовсім іншим компілятором
Semih Ozmen

1

Перевстановлення CMake працювало на мене. Нова копія CMake з'ясувала, що він повинен використовувати Visual Studio 11 замість 10.


1

Я використовував Windows SDK для основного програмування Win32 і мав .NET 4.5 з "невідомих" причин. Я видалив це і встановив 4.0, як попередні відповіді, і так, він працював і для мене.

Щойно я здивований, що мені довелося використовувати марну рамку .NET для створення програм Win32 за допомогою SDK.


1

Я вирішив це, зробивши наступне:

  1. У командному рядку введіть msconfig і натисніть клавішу Enter.
  2. Перейдіть на вкладку служби.
  3. Шукайте "Досвід застосування" та поставте галочку (тобто виберіть це, щоб увімкнути).
  4. Натисніть кнопку ОК. І перезапустіть, якщо потрібно.

Таким чином, проблема піде назавжди. Створіть випадковим чином і налагоджуйте свої C ++ проекти без будь-яких порушень.


Ви також можете ввімкнути службу Applicationaton Experienc з services.msc
App Work

2
Що це робить для вирішення проблеми?
мабрахам

1

Для тих, хто шукає рішення цієї проблеми із зразками вихідного коду OpenGL SuperBible 6, рішення будується в Release замість Debug . Усі проекти відключили параметр додаткового посилання у версії Release .


1

Моя проблема полягала в тому, що у мене на ПК було два шляхи, які містили ті самі бібліотеки. Обидва шляхи були додані до додаткових каталогів бібліотеки у властивостях конфігурації -> Linker -> General . Видалення одного з шляхів вирішило проблему.


1

У мене була та сама проблема після оновлення .NET: Спочатку я видалив .NET Framework, завантажив візуальну студію з visualstudio.com і вибрав "ремонт".

NET фреймворк встановлювався автоматично за допомогою візуальної студії -> і тепер він працює чудово!


1

Я кілька разів спробував і, нарешті, вирішив проблему, видаливши кілька разів VS2010. Я думаю, що я не видалив усі файли, і тому це не працювало вперше.

В інсталяції VS2012 говориться, що якщо у вас VS2010 SP1, ви не можете працювати над одним і тим же проектом в обох програмах. Рекомендується мати лише одну програму.

Дякую!


1

У мене виникла ця проблема після того, як я встановив Visual Studio 2017 та .NET Framework 4.6 на машині, на якій раніше був Visual Studio 2010.

Проблема полягала в тому, що після такої установки файл msvcr100_clr0400.dll від C: \ Windows \ System32 був перезаписаний на новий із дуже невеликим розміром ~ 19 Кб, проте попередній - ~ 800 Кб.

Після того як я відновив файл вручну з іншої збірної машини cvtres.exe, знову почав працювати належним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.