Подтвердить что ты не робот

Команда rc.exe больше не найдена в командной строке VS 2015

Я только что установил обновление для разработчиков Windows 10 (версия 10.0.15063).

У меня есть несколько версий Visual Studio (2012, 2013, 2015 и 2017). Я установил VS 2017 всего пару недель назад.

Проблема

CMake (версия 3.8.1) больше не находит компилятор C/С++ при запуске внутри "VS2015 x64 Native Command Prompt" (он работает нормально, когда запускается в командной строке VS 2017).

Воспроизведение

Содержимое CMakeLists.txt:

project (test)
add_executable (test test.cpp)

(Содержание test.cpp не имеет значения.)

Вызов CMake в командной строке VS2015 x64:

> mkdir build
> cd build
> cmake -G "Visual Studio 14 2015 Win64" ..

Выход CMake:

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_CXX_COMPILER could be found.

-- Configuring incomplete, errors occurred!
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeOutput.log".
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeError.log".

Анализ

Причина отказа очевидна при просмотре CMakeFiles/CMakeError.log:

ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
  CMakeCCompilerId.c
Link:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X64 Debug\CMakeCCompilerId.obj
LINK : fatal error LNK1158: cannot run 'rc.exe' [D:\dev\cmaketest\build\CMakeFiles\3.8.1\CompilerIdC\CompilerIdC.vcxproj]

rc.exe (Resource Compiler) не найден. Действительно, в той же командной строке VS 2015:

> where rc.exe
INFO: Could not find files for the given pattern(s).

Пока он находится в командной строке VS 2013:

> where rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x64\rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe

и командной строки VS 2017:

> where rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe

Проверка содержимого переменных среды PATH в различных командах командной строки VS:

  • В командной строке VS 2013 PATH содержится

    C:\Program Files (x86)\Windows Kits\8.1\bin\x64
    
  • В командной строке VS 2017 PATH содержит

    C:\Program Files (x86)\Windows Kits\10\bin\x64
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
    
  • Но внутри командной строки VS 2015 PATH содержит только

    C:\Program Files (x86)\Windows Kits\10\bin\x64
    

    который не содержит rc.exe.

Вопросы

  • Является ли это известной проблемой или она специфична для моей системы?

  • Может ли Windows 10 Creators Update установить, удалить или изменить систему (возможно, что-то связанное с Windows SDK), которая могла бы вызвать эту проблему?

  • Что такое чистый способ решить эту проблему?

Изменить: Установленные компоненты VS 2017:

Установлены компоненты VS 2017

4b9b3361

Ответ 1

Провел некоторое время, глядя на это на трех машинах с установкой Win10 Creators Edition и VS2010, VS2013, VS2015 и VS2017, где он работает на двух машинах и не работает на третьем. У всех было VS2015 Update 3, и все они должны были быть установлены с теми же параметрами.

Запуск следующего командного файла

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat

должна настроить правильную среду для среды VS2015 x64. Это должно добавить

C:\Program Files (x86)\Windows Kits\10\bin\x64

в PATH. Здесь rc.exe. Однако на моей неисправной машине rc.exe отсутствовал здесь, но он действительно существовал в

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64

Я вернулся и почувствовал, что это была проблема с настройкой. Я перезапустил установку VS2015 Update 3 и сказал ей добавить

Windows и веб-разработка → Универсальные средства разработки приложений для Windows → Инструменты (1.4.1) и Windows 10 SDK (10.0.14393)

это вызвало rc.exe и связанные файлы, которые будут отображаться в

C:\Program Files (x86)\Windows Kits\10\bin\x64

Запуск rc -v на

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe

и

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe

дал тот же номер версии 10.0.10011.16384

Не знаю, почему rc.exe отсутствовал в исходной установке, но повторная установка и добавление другого SDK исправили его для меня. Он выглядит как

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe

должен быть по умолчанию rc.exe, но он не был установлен предыдущей установкой.

Ответ 2

Это определенно не только вы. Я установил VS2017 вчера, и, похоже, я поставил ту же проблему на моем конце. У меня нет хорошего решения (об этом следует сообщать Microsoft как об ошибке), но у меня есть хакерское решение.

Мне удалось скопировать rc.exe и rc.dll из

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64 
to
C:\Program Files (x86)\Windows Kits\10\bin\x86

Это решило проблему для меня. Моя догадка заключается в том, что он переписывается в раздел реестра, но я не уверен, чтобы он был уверен в этом.

Ответ 3

Встречается та же проблема с Windows 10 15063.608 (Windows SDK 10.0.15063.0). Решение, работающее для меня, - это создание жестких ссылок для двоичных файлов x64 и x86 для Windows 10, как показано ниже (используйте командную строку с правами администратора):

mklink /J "C:\Program Files (x86)\Windows Kits\10\bin\x86" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86"

mklink /J "C:\Program Files (x86)\Windows Kits\10\bin\x64" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64"

(перед запуском этих команд просто переименуйте существующие папки Windows Kits\10\bin\x64 и Windows Kits\10\bin\x86 - похоже, что они не используются.

Ответ 4

По какой-то причине встроенный установщик Инструменты (1.4.1) и Windows 10 SDK (10.0.14393) не работал у меня:

  • C:\Program Files (x86)\Windows Kits\10\bin\x86 получил заполненную среднюю установку (успех!)
  • ... затем заселен (печаль!) ​​
  • И в итоге установщик вернул ошибку -2147023293/0x80048646.

"Windows 10 SDK (версия 10.0.14393.795)" установщик из Windows SDK и архив эмулятора работали, хотя: C:\Program Files (x86)\Windows Kits\10\bin\x86 получает и остается заселенным, в том числе rc.exe.

Windows 7 x64, обновление Visual Studio Professional 2015 3.

Ответ 5

Задание CMAKE_SYSTEM_VERSION=8.1 решил проблему для меня.

Ответ 6

Аналогичная проблема с VS2017 Community 15.4.5 с Windows Sdk версии 10.0.16299.0, но только для сборки через TeamCity; строит изнутри VS, работает отлично, а также работает с MSBuild, начиная с командной строки VS-разработчика. Так что это точно не отвечает на вопрос OP, но настолько похож, и это один из первых совпадений поиска, поэтому я добавлю его здесь.

Нашли решение, которое не требует модификации установки каким-либо образом (без привязки/копирования, менее подверженного ошибкам и легко автоматизируемого):

установите переменную среды VisualStudioVersion в 15.0.

Вы можете сделать это глобально, используя стандартную Windows gui для этого (пример для Windows 10 здесь), но я бы настоятельно советовал вам, потому что это может помешать другие версии VS, более того, это не изменение, которое легко автоматизировано и не проверено в вашем коде сборки и, следовательно, более сложно воспроизвести всевозможные разные машины. Лучшей альтернативой является установка этого в командной строке, где выполняется сборка (cmd: set VisualStudioVersion=15.0 PS: $env:VisualStudioVersion = '15.0' в TeamCity: добавьте параметр env.VisualStudioVersion). Другой альтернативой является передача этого каталога в MSBuild в качестве свойства (pass /p:VisualStudioVersion=15.0 или в teamCity add system.VisualStudioVersion).

Ответ 7

  1. Запустите онлайн-установщик vs_community2017.exe.
  2. выберите изменить свой VS2017
  3. выберите разработку рабочего стола с помощью C++
  4. выберите Windows 10 SDK (моя версия 10.0.10586) и установите его

Запустите командную строку VS2015:

> where rc
> C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
> C:\Program Files (x86)\Windows Kits\10\bin\x86\rc.exe

Кажется, что vs2017 по умолчанию устанавливает новейший SDK и перезаписывает старые версии.

Ответ 8

Для тех, кто застрял на этом, один конкретный набор проблем:

  1. получить новый Windows 10 ПК
  2. установить VS 2017 [*]
  3. удалить VS 2017 и
  4. установить VS 2015

Если вы делаете выше,

похоже, что есть ошибка или другое поведение в общем наборе установщиков Windows/VS.

По сути, кажется, что MSFT нужно решить четырьмя проблемами: (а) иногда он просто не устанавливает rc.exe, (б) он не устанавливает rc.exe, если вы "только" запрашиваете материал c++, вы (c) кажется, что конвейер удаления-установки все перепутан различными способами (d), даже если он случайно устанавливает для вас rc.exe, он забывает или забивает путь.

:/

Короче говоря, утомительные решения, кажется, включают один или несколько

  1. в основном установить или переустановить 10.0.10011.16384 (но только этот, НЕ два более поздних)
  2. оглянись вокруг и увидишь, что rc.exe просто, прямо, не там. Если это так, установите его (где-нибудь, где угодно)
  3. в VS можно подумать, что вы можете установить "просто" материал c++, но нет. На практике вы ДОЛЖНЫ проверить "да" во всем Интернете, бла-бла. Это, кажется, дает вам "больше надежды" на получение rc.exe. Сделав это, вернитесь к пункту 2, поскольку у вас, возможно, все еще нет этого.
  4. Выполнив 2, затем 3 и, скорее всего, 2 снова, вы, скорее всего, ЕЩЕ не будете иметь его на своем реальном пути. Я хотел бы знать, какое "лучшее, естественное" место для него на вашем пути, но это, кажется, безнадежное дело. Просто протолкни его на свой путь куда-нибудь, куда угодно.
  5. Создайте где-нибудь простой файл cmake - и протестируйте его.

, , , , ,

[*] он вполне может прийти с VS 2017, и не забывайте, что VS 2017 может быть досадно установлен с чем-то другим, Unity и т.д.

Ответ 9

Откройте "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat" в текстовом редакторе в режиме администратора и измените строку

@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%PATH%

в

@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%WindowsSdkDir%bin\%WindowsSDKVersion%x86;%PATH%

Ответ 10

У меня была точно такая же проблема. Несколько версий Visual studio, включая 2015 и 2017 годы. Моим решением было запустить команду cmake из командной строки разработчика 2017 и указать версию Visual Studio 2015 с помощью:

cmake -G "Visual Studio 14 2015"..

Ответ 11

выполните следующую команду в командной строке Visual 64/86 Visual Studio, чтобы установить правильную версию для vs2015 - % comspec%/k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 8.1 % comspec%/k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 8.1

выполните следующую команду в родной командной строке 64/86 visual studio, чтобы установить правильную версию для vs2013 - % comspec%/k "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64 7.1 % comspec%/k "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86 7.1

Это установит правильный путь и выполнит без проблем. Я проверил это на WIN10 с VS2013, VS2015, VS2017 установлен.

Ответ 12

Похоже, при установке более новой версии Visual Studio по умолчанию будет выбран более свежий SDK.

Вы должны выбрать SDK (8.1), который установлен с VS2015:

%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" <arch> 8.1

Я нашел правильный ответ здесь