it-swarm.com.ru

Ошибка "ССЫЛКА: фатальная ошибка LNK1123: ошибка при преобразовании в COFF: файл неверен или поврежден" после установки Visual Studio 2012 Release Preview

Я установил 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 , перезагрузился, и проблема все еще сохраняется! Помогите!

526
Orion Edwards

Этот поток MSDN объясняет, как это исправить.

Подвести итоги: 

  • Либо отключите добавочные ссылки, перейдя в 

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • или установите VS2010 SP1.

Изменения (@CraigRinger): обратите внимание, что при установке VS 2010 SP1 будет удалить 64-битные компиляторы. Вам необходимо установить VS 2010 SP1 compiler pack , чтобы получить их обратно.

Это касается Microsoft Windows SDK 7.1 для Windows 7 и .NET 4.0, а также Visual Studio 2010.

647
Short

Если отключение инкрементного связывания не работает для вас, а отключение «Вставить манифест» также не работает, найдите в своем пути несколько версий CVTRES.exe.

Отладив с помощью опции компоновщика/VERBOSE, я обнаружил, что компоновщик записывал это сообщение об ошибке, когда пытался вызвать 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 версия cvtres.exe VS2010 больше не будет работать. Если это первый путь в вашем пути, и компоновщик решит, что ему нужно преобразовать файл .res в формат объекта COFF, ссылка не будет установлена ​​с LNK1123.

(Действительно раздражает, что сообщение об ошибке не имеет ничего общего с реальной проблемой, но это не является необычным для продукта Microsoft.)

Просто удалите/переименуйте старую версию утилиты или переставьте переменную PATH, чтобы работающая версия была первой.

Помните, что для сборок инструментов x64 вам также может понадобиться проверить C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\AMD64, где есть другой cvtres.exe.

247
Die in Sente

Проверьте версию cvtrs.exe:

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

Неверная версия:
date: 18.03.2010
time: 01:16 вечера
size: 31 048 байт 
name: cvtres.exe

Правильная версия:
date: 21.02.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"
49
Sid

В соответствии с этой веткой на форумах MSDN: VS2012 RC прерывает установку проектов 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).

45
mloskot

Если вы установили Visual Studio 2012 RC, то он установил .NET 4.5 RC.

Удалите .NET 4.5 RC и установите нужную версию (4.0 для VS 2010). Это должно устранить любые проблемы, которые у вас есть.

Это решило ту же проблему. Нет необходимости удалять Visual Studio.

35
B_Dubb86

Это из-за того, что .NET Framework 4.5 заменяет .NET Framework 4.0 . Я несколько раз удалял Visual Studio 2010 безуспешно. Когда я удалил .NET Framework 4.5 и переустановил Visual Studio 2010, все прошло нормально.

Смотрите полностью удалите Visual Studio 11, чтобы выполнить новую установку.

15
AlonSamuel

Для меня установка «Сгенерировать манифест» на «Нет» исправила это. (Также исправлено с помощью/INCREMENTAL: NO)

14
FractalSpace

Если вы используете 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
13
Richard Peck

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

Это заняло вечность, но теперь я могу снова скомпилировать C++ проекты в VS2010.

12
Orion Edwards

Проблема была волшебным образом решена для меня путем удаления .NET 4.5 и замены ее на .NET 4.0. Затем мне пришлось отремонтировать Visual Studio 2010 - он каким-то образом был поврежден.

Ранее я установил, а затем удалил Visual Studio 2012, что может быть связано с этой проблемой.

11
Caterpillar

Я не установил Visual Studio 2012, но я все еще получил эту ошибку в Visual Studio 2010. Я получил это исправлено после установки Visual Studio 2010 SP1.

10
Saji

У меня была та же проблема с 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

8
sepideh

+1 к пользователю Short for ответ у меня сработало!

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

Таким образом, похоже, что корневая проблема связана с тем, что этот файл манифеста не генерируется или используется, когда должен был использоваться <somename> .dll.intermediate.manifest.

Альтернативное решение, кажется, состоит в том, чтобы отключить опцию «Embed Manifest» в «Properties», «Manifest Tool», «Input and Output».

6
Die in Sente

Это не сработало для меня после «Включить инкрементное связывание» -> «Нет (/ INCREMENTAL: NO)», но у меня сработало после того, как я удалил rc-файл.

5
robin.lo

По состоянию на январь 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. Это сработало для меня.

4
JackOLantern

Подвести итоги:

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 Скопируйте один из файлов:

  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

    Затем замените на C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe Со мной, сделайте 3 шага, это работает

4
Hung Pham

Даже несмотря на установку пакета обновления, вы получаете сообщение об ошибке, а затем попробуйте удалить/переименовать файл cvtres.exe в папке C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin. Это сработало для меня.

2
nerd

Моя проблема заключалась в том, что у меня было два пути на моем компьютере, которые содержали одинаковые библиотеки. Оба пути были добавлены в Дополнительные каталоги библиотек in Свойства конфигурации -> Линкер -> Общие . Удаление одного из путей решило проблему.

1
mihai

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

При установке VS2012 говорится, что если у вас VS2010 SP1, вы не можете работать над одним проектом в обеих программах. Рекомендуется иметь только одну программу. 

Спасибо!

1
Vengage

Я установил Включить инкрементное связывание в "Нет (/ INCREMENTAL: NO)" и это у меня не работает.

Затем я изменился:

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

и это работает для меня :)

1
sma6871

Я использовал Windows SDK для программирования ядра Win32 и установил .NET 4.5 по неизвестным причинам. Я удалил это и установил 4.0 как предыдущие ответы, и да, это работало и для меня.

Просто ошеломлен, что мне пришлось использовать бесполезную платформу .NET для создания приложений Win32 с использованием SDK.

0
Vijay Kumar Kanta

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

NET Framework были установлены автоматически с Visual Studio -> и теперь она работает отлично!

0
Aleksandr Khomenko

У меня была эта проблема после того, как я установил Visual Studio 2017 и .NET Framework 4.6 на компьютере, на котором ранее была Visual Studio 2010.

Проблема заключалась в том, что после такой установки файл msvcr100_clr0400.dll из C:\Windows\System32 был перезаписан новым с очень маленьким размером ~ 19 КБ, однако прежний был ~ 800 КБ.

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

0
Alexander Samoylov

Я решил это, сделав следующее:

  1. В командной строке введите msconfig и нажмите ввод.
  2. Нажмите вкладку услуг. 
  3. Найдите «Application Experience» и поставьте галочку (то есть выберите это, чтобы включить). 
  4. Нажмите ОК. И перезагрузите при необходимости.

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

0
App Work

Для тех из вас, кто ищет решение этой проблемы с примерами исходного кода OpenGL SuperBible 6th, решение встраивается в Release вместо Debug . Во всех проектах отключена опция инкрементного связывания в Release version.

0
Gallo

Переустановка CMake у меня сработала. Новая копия CMake выяснила, что она должна использовать Visual Studio 11 вместо 10.

0
naroom