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

Я установил предварительный просмотр Visual Studio 2012 Release, и это выглядит нормально, но теперь, когда я пытаюсь использовать Visual Studio 2010 для компиляции проектов на С++, появляется следующее сообщение об ошибке:

LINK: фатальная ошибка LNK1123: сбой при преобразовании в COFF: файл недействителен или поврежден

Я не уверен на 100%, но, похоже, он связан с проектами, в которых есть .rc (resource) файлы.

Я попытался восстановить Visual Studio 2010 из "Установка и удаление программ" и перезагрузить, но это не имеет никакого эффекта.

Я также получаю ту же ошибку, если я использую Visual Studio 2012 RC для компиляции проектов на С++ при настройке на использование набора инструментов Visual Studio 2010. Обновление до набора инструментов Visual Studio 2011 устраняет проблему (но, конечно, я не хочу делать это для производственного кода).

Обновление: я удалил Visual Studio 2012, перезагрузился, и проблема по-прежнему сохраняется! Помогите!

Ответ 1

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

Подводя итог:

  • Либо отключите инкрементную привязку, перейдя в

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

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

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

Ответ 2

Если отключение инкрементной привязки не работает для вас, и выключение "Embed Manifest" тоже не работает, тогда найдите свой путь для нескольких версий CVTRES.exe.

Отладка с помощью опции linker/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.

Ответ 3

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

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

Неверная версия:
date: 03/18/2010
time: 13:16 вечера
size: 31 048 байт
name: cvtres.exe

Правильная версия:
date: 02/21/2011
time: 18: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"

Ответ 4

В соответствии с этим вопросом на форумах MSDN: VS2012 RC-установка нарушает VS2010 проектов на С++, просто возьмите 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).

Ответ 5

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

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

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

Ответ 7

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

Ответ 8

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

Это потребовалось навсегда, но теперь я могу снова скомпилировать проекты на С++ в VS2010.

Ответ 9

Если вы используете x64, здесь ресурс поможет:

Это происходит потому, что Microsoft.NET 4.5 несовместим с Visual С++ 10. Обходной путь заключается в том, чтобы запустить версию cvtres.exe.NET, а не версию Visual С++. Я сделал это, переименовав версии этих файлов на Visual С++ и скопировав версии .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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

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

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

Альтернативное решение, похоже, заключается в отключении опции "Вставить манифест" в разделе "Свойства", "Инструмент манифеста", "Ввод и вывод".

Ответ 13

Это не сработало для меня после Enable Incremental Linking → "No (/INCREMENTAL: NO)", но он работает для меня после того, как я удалил файл rc.

Ответ 14

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

Ответ 15

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

Ответ 16

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

Ответ 17

Подводя итог:

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

  • C:\Program Files (x86)\Microsoft Visual Studio 11,0\VC\Bin\cvtres.exe
  • C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Bin\cvtres.exe
  • 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 шага, чтобы он работал.

Ответ 18

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

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

Спасибо!

Ответ 19

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

Далее я изменил:

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

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

Ответ 20

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

Ответ 21

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

Ответ 22

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

  • В командной строке введите msconfig и нажмите enter.
  • Нажмите вкладку служб.
  • Ищите "Application Experience" и поставьте галочку (т.е. выберите это для включения).
  • Нажмите "ОК". И при необходимости перезапустите.

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

Ответ 23

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

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

Ответ 24

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

Ответ 25

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

NET framework были установлены автоматически с визуальной студией → , и теперь она отлично работает!