Visual Studio 2012: cl.exe -1073741701 только для x86

699
NoAngel

Я использую Visual Studio 2012 Professional, обновленный до SP5 под Windows 7 SP1 с последними обновлениями. Некоторое время я нуждался в Visual Studio 2015, установил, а затем удалил его стандартным деинсталлятором.

Но сегодня мне нужно было собрать Webkit для Windows, и его скрипт сборки запустился vswhere.exeи обнаружил некоторые части Visual Studio 2015 как «работающую» установку, поэтому мне потребовалась «полная» деинсталляция для VS2015, которую я нашел здесь: https: // github. ru / Microsoft / VisualStudioUninstaller . Я запустил его один раз, и VS2015 исчез с vswhere.exeвыхода.

Но теперь у меня есть проблема: каждое приложение, которое я пытаюсь скомпилировать с VS2012, выдает «cl.exe ненормально завершен с кодом -1073741701».

Я старался :

  • Несколько раз переустанавливал VS2012 с или без SP5, включая чистую переустановку (удаление основной, удаление зависимостей, повторная установка), все та же ошибка.
  • Пытался отремонтировать VS2012.
  • Я пытался запустить C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe, он говорит, что "mspdb110.dll не найден".
  • Я скопировал Msobj110.dll, Mspdb110.dll, Mspdbcore.dllи Mspdbsrv.exe от C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE и добавляют к PATH C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE. Все та же ошибка.

Если я переключаю платформу проекта на x64, она компилируется и запускается без проблем. Только компилятор x86 не может работать и выдает ошибку выше. Иногда в VS2012 появляется всплывающее окно «cl.exe не может запустить код 0xc000007b».

Если я запускаю C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat x86, я могу запускать cl.exeи даже компилировать работающие 32-битные приложения, но в Visual Studio 2012 IDE он не запускается cl.exeкаждый раз, независимо от того, что я делаю.

Пожалуйста, помогите мне исправить это.

Я думаю, может быть, это как-то связано с .NET Framework (у меня установлены 4.5, 4.6 и 4.7) в MSBuildпапке. Может мне нужно как-то переустановить .NET Framework SDK? Если возможно, я хочу избежать переустановки ОС.

РЕДАКТИРОВАТЬ: началось вознаграждение. Все еще есть та же проблема.

Я попытался вставить команду run cl.exeбез параметров в скрипт «Run before build ...», и он запускается оттуда! Но после этого IDE запускается cl.exeиз среды .NET и дает:

C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.CppCommon.targets (347,5): ошибка MSB6006: код ошибки «CL.exe» прерван -1073741701

Если я выбираю платформу x64, cl.exeвезде отлично работает. Если я бегу vcvarsall.bat x86, я могу запустить cl.exeи скомпилировать.

Единственное, что мне нужно исправить - это какой-то путь в среде, который использовался для сборки Win32 x86 из Visual Studio 2012 IDE. Я могу переустановить .NET Framework или Visual Studio (пробовал, но в любом случае) или редактировать некоторые конфигурации MSBuild. Подскажите пожалуйста где можно починить. Единственное, что я не могу сделать, это переустановить ОС, так как у меня много программного обеспечения, и переустановка займет много времени.

ОБНОВЛЕНИЕ: пытался удалить все, включая .NET Framework 4.5, 4.6, 4.7 и Microsoft SQL Server 2008, 2012. Затем установил Visual Studio 2012 Professional RTM. После установки при первом запуске я открыл тестовое приложение и получил ту же ошибку, что и выше ... x64 версия работает. То же самое после установки SP5.

ОБНОВЛЕНИЕ 2: Попытка принести файлы Visual Studio 2012 и Windows SDK и msbuild из установленной виртуальной машины Windows 7 SP1. Это не исправляет ошибку, та же проблема. Также пытался заменить cl.exe на фиктивное 32-битное приложение, все равно вызывает 0xc000007b каждый раз, когда я запускаю сборку из IDE. Похоже, при запуске из IDE Visual Studio использует 32-битный cl.exe с некоторыми 64-битными DLL. Но я не знаю, как его найти и как исправить.

0

2 ответа на вопрос

0
harrymc

Риск удаления одной версии Visual Studio, когда установлено несколько, состоит в том, чтобы удалить слишком много. Версии Visual Studio могут быть установлены параллельно, но они могут использовать общие компоненты.

Похоже, именно это и произошло с вами, и ваши попытки исправить это путем копирования библиотек DLL и изменения PATH только добавили путаницы. В настоящее время я считаю, что ваш PATH и другие переменные среды вызывают смешивание 32-битных и 64-битных DLL, если вы не запуститеvcvarsall.bat для сброса.

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

Это самый близкий способ сделать чистую установку Visual Studio и .Net, о котором я могу думать:

  • Чистая-деинсталляция Visual Studio 2012 Professional с использованием бесплатного Revo Uninstaller
  • Удалите все версии .Net, которые вы можете, из Панели управления> Программы и компоненты, а также из Включения или выключения функции Windows.
  • Очистите все папки и реестр вручную или запустив очиститель, такой как CCleaner.
  • Переустановите .Net версии (версии), пытаясь свести к минимуму их количество (обычно вам нужна только последняя версия)
  • Установите Visual Studio 2012 Professional и обновите до SP5.

Я не могу гарантировать успех, но так я бы попытался получить действительно чистую установку и избежать переустановки Windows.

Я предлагаю на всякий случай взять резервную копию образа системного диска, чтобы вы могли вернуться к нему. Я рекомендую AOMEI Backupper Standard .

Спасибо за ответ. К сожалению, я изо всех сил пытался переустановить все это и .NET Framework тоже. Установщик Visual Studio работает довольно хорошо и устанавливает .NET Framework со всеми зависимостями и всеми файлами. Я думаю, что единственное, что испортил, это путь к mspdb110.dll. 32-битный cl.exe как-то пытается загрузить 64-битную DLL. На моем компьютере ровно два mspdb110.dll, один в папке IDE (32-разрядная), другой в папке amd64 (64-разрядная). Странно то, что он делает это только тогда, когда работает под IDE из msbuild. Моя идея состоит в том, чтобы сделать dummy cl.exe и проверить используемую среду. До сих пор не знаю, где я могу изменить путь, установленный msbuild. NoAngel 5 лет назад 0
Если вы чистите все очень хорошо, PATH не должен ошибаться. После полной деинсталляции убедитесь, что в PATH ничего не осталось (но CCleaner должен это обнаружить). harrymc 5 лет назад 0
ОК, попробую позже. Просто хочу посмотреть, есть ли какое-то более легкое исправление, прежде чем удалить все это и сканировать. Все это за одну DLL. Если ничего не поможет, а CCleaner подойдет, +50 - это ваше :). NoAngel 5 лет назад 0
Я понимаю. Удаление или установка Visual Studio - большая проблема, и повторять ее повторно просто ужасно. harrymc 5 лет назад 1
Обязательно отмените все, что вы делали вручную, потому что деинсталлятор наверняка не узнает об этом, и не уверен, что Revo или CCleaner его поймают. harrymc 5 лет назад 0
Я попробовал (чистая деинсталляция, CCleaner, переустановка, обновление 5). К сожалению, это не решает мою проблему. В любом случае, спасибо! Интересно, что если вместо «cl.exe» поставить фиктивный 32-битный exe, что вызывает ошибку, Visual Studio 2012 по-прежнему выдает 0xc000007b, как если бы 32-битный EXE работал с 64-битной DLL ... Если бы я знал способ отследить, какая DLL и как это изменить я наверное смогу исправить. К сожалению, нет. NoAngel 5 лет назад 0
Если вы знаете `.exe`, легко отследить зависимости, используя [Dependency Walker] (http://www.dependencywalker.com/). Если вы этого не сделаете, вы все равно можете отслеживать, что происходит с помощью [Process Monitor] (https://docs.microsoft.com/en-us/sysinternals/downloads/procmon). harrymc 5 лет назад 0
В общем, я не думаю, что вам удалось полностью устранить то, что вызвало проблему. Чистая деинсталляция плюс переустановка должны были восстановить здоровую ситуацию Если проблема была в VS2015, возможно, переустановка и удаление с помощью Revo может помочь на этот раз для выполнения описанной выше процедуры. Но все это отнимает у вас много часов и дней, поэтому я начинаю сомневаться в том, стоит ли мне действительно рекомендовать чистую установку Windows, а не тратить столько времени на неудачные манипуляции, хотя это также может занять много времени. harrymc 5 лет назад 1
Попробую переустановить Visual Studio 2015. Думаю, достаточно просто установить, так как VS2012 и VS2015 работают до и после деинсталляции VS2015. Также будет интересно, если 32-битный компилятор VS2015 C ++ все еще работает. NoAngel 5 лет назад 0
Попробовал: cl.exe 32-bit из VS2015 работает, но выдает странные ошибки ссылки: "LIBCMTD.lib (loadcfg.obj): 3 неразрешенных символа: ___guard_fids_table, ___guard_fids_count, ___guard_flags", то же в режиме выпуска, то же самое с / GS- , Сборка командной строки работает. Работают 64-битные компиляторы в 2012, 2015. VS2015 обновление 3 применяется, все тот же. VS2012 cl.exe 32-разрядная выдает ту же ошибку, что и до установки VS2015. Я думаю, что я сдамся и переустановлю ОС позже, когда найду время для этого. По крайней мере, теперь я могу скомпилировать в 64-битную версию. NoAngel 5 лет назад 0
VS и .Net - очень сложный продукт, и когда они идут не так, это не всегда возможно исправить. Лично я избегаю их удаления, по уважительной причине, я думаю. harrymc 5 лет назад 0
0
Philipp Preis

Была такая же проблема с VS2015. В моем случае удаление следующих файлов из папки проекта решило проблему

\.vs\myProjectName\v14\.suo \myProjectName.VC.db \x64 (the whole x64 build output folder if there is one) 
... но только потому, что это сбросило целевую версию VC моего проекта. К сожалению, вернув исходную версию, проблема вернулась. Philipp Preis 5 лет назад 0
Моя проблема не в настройках проекта. Это происходит всегда на любом новом проекте, и на всех проектах тоже. Там все еще может быть способ исправить установку VS, но я не вижу здесь никто не знает как. NoAngel 5 лет назад 0