visual-studio-2010 - что - vs 2010 sp1




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

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

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

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

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

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

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


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

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

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

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


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

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


Для меня установка «Generate Manifest» на «No» исправила его. (Также исправлено с / INCREMENTAL: NO)


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


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

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

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


Если отключение инкрементной привязки не работает для вас, и выключение «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 .


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


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


Проверьте версию 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 : 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"

Согласно этой теме на форумах 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 в установке RTM VS2010 ( без 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).


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

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


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

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

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



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


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


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

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

Спасибо!


Я установил Enable Incremental Linking на «No (/ INCREMENTAL: NO)», и это не работает для меня .

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

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

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


Этот поток 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 .





visual-studio-2012