Ошибка "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.
Ответ 6
Это из-за .NET Framework 4.5 заменяет .NET Framework 4.0.
Я удалил Visual Studio 2010 несколько раз без везения. Когда я удалил .NET Framework 4.5 и переустановил Visual Studio 2010, все прошло отлично.
Смотрите полностью удалить Visual Studio 11, чтобы выполнить новую установку.
Ответ 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 были установлены автоматически с визуальной студией → , и теперь она отлично работает!