rc.exe ya no se encuentra en el símbolo del sistema VS 2015


Acabo de instalar Windows 10 Creators Update (versión 10.0.15063).

Tengo varias versiones de Visual Studio instaladas (2012, 2013, 2015 y 2017). Instalé VS 2017 hace solo un par de semanas.

Problema

CMake (versión 3.8.1) ya no encuentra el compilador C/C++ cuando se ejecuta dentro de un símbolo del sistema nativo "VS2015 x64" ( funciona correctamente cuando se ejecuta dentro de un símbolo del sistema VS 2017).

Reproducción

Contenido de CMakeLists.txt:

project (test)
add_executable (test test.cpp)

(El contenido de test.cpp es irrelevante.)

Invocación de CMake, en un símbolo del sistema nativo VS2015 x64:

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

Salida 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".

Análisis

La razón del fracaso es clara al mirar 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 (No se encuentra el Compilador de recursos. De hecho, en el mismo símbolo del sistema VS 2015:

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

Mientras que se encuentra en un símbolo del sistema 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

Y un comando VS 2017 prompt:

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

Comprobando el contenido de las variables de entorno PATH en varios comandos VS:

  • Dentro de un símbolo del sistema VS 2013, PATH contiene

    C:\Program Files (x86)\Windows Kits\8.1\bin\x64
    
  • Dentro de un símbolo del sistema VS 2017, PATH contiene

    C:\Program Files (x86)\Windows Kits\10\bin\x64
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
    
  • Pero dentro de un símbolo del sistema VS 2015, PATH solo contiene

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

    Que no contiene rc.exe.

Preguntas

  1. ¿Es esto un conocido problema o es específico de mi sistema?

  2. ¿Qué podría Windows 10 Creators Update posiblemente instalar, desinstalar o alterar en el sistema (tal vez algo relacionado con los SDK de Windows) que desencadenaría este problema?

  3. ¿Cuál es una forma limpia de resolver esto?

Editar: Componentes instalados VS 2017:

VS 2017 componentes instalados

Author: François Beaune, 2017-05-08

7 answers

Pasó algún tiempo mirando esto en tres máquinas con Win10 Creators Edition y VS2010, VS2013, VS2015 y VS2017 instalados, donde funciona en dos máquinas y falla en la tercera. Todos tenían VS2015 Update 3 y todos deberían haber sido instalados con las mismas opciones.

Ejecutando el siguiente archivo por lotes

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

Debe configurar el entorno correcto para el entorno VS2015 x64. Esto debe añadir

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

Al CAMINO. Aquí es donde rc.exe debe ser. Obstante en mi máquina que falla rc.exe {[15] } faltaba de aquí, pero existía en

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

Regresé y sentí que esto era un problema de configuración, volví a ejecutar la configuración de la actualización 3 de VS2015 y le dije que agregara

Windows y Desarrollo Web - > Herramientas Universales de Desarrollo de Aplicaciones de Windows - > Herramientas (1.4.1) y SDK de Windows 10(10.0.14393)

Esto causó rc.exe y archivos relacionados a aparecer en

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

Corriendo rc-v en

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

Y

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

Dio el mismo número de versión 10.0.10011.16384

No estoy seguro de por qué rc.exe faltaba en la instalación original, pero volver a ejecutar la instalación y agregar el otro SDK lo arregló para mí. Parece que

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

Debe ser el valor predeterminado rc.exe pero no fue configurado por una instalación anterior.

 49
Author: DaveCleland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-26 06:31:31

Definitivamente no eres solo tú. Instalé VS2017 ayer y al hacerlo parece haber producido el mismo problema por mi parte. No tengo una buena solución (esto debe ser reportado a Microsoft como un error), pero tengo una solución de hacky.

Pude copiar rc.exe y rc.dll de

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

Eso resolvió el problema para mí. Mi corazonada es que es una clave de registro siendo sobrescrita pero no he profundizado lo suficiente como para estar seguro.

 9
Author: Falcon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-09 18:57:04

Se encontró con el mismo problema con Windows 10 15063.608 (Windows SDK 10.0.15063.0). La solución que funciona para mí es la creación de enlaces duros para Windows 10 kit binarios x64 y x86 carpetas como se muestra a continuación (utilice el símbolo del sistema con derechos de administrador):

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"

(antes de ejecutar estos comandos simplemente cambie el nombre de las carpetas existentes Windows Kits\10\bin\x64 y Windows Kits\10\bin\x86 - parece que no están en uso.

 4
Author: Victoria Zhislina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-19 10:17:27

Especificando CMAKE_SYSTEM_VERSION=8.1 resolví el problema para mí.

 2
Author: Lars Bilke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-18 13:14:40

Por cualquier razón, el instalador integrado de Tools (1.4.1) y Windows 10 SDK (10.0.14393) no funcionó para mí:

  1. C:\Program Files (x86)\Windows Kits\10\bin\x86 se llenó a mitad de la instalación (¡éxito!)
  2. ...luego despoblado (tristeza!)
  3. Y finalmente el instalador devolvió el error -2147023293/0x80048646.

El "Windows 10 SDK (ver. 10.0.14393.795) " installer from the Windows SDK and emulator archive worked though: C:\Program Files (x86)\Windows Kits\10\bin\x86 gets and stays populated, including rc.exe.

Windows 7 x64, Visual Studio Professional 2015 Update 3.

 2
Author: genpfault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-05 21:26:46

Problema similar con VS2017 Community 15.4.5 con Windows Sdk versión 10.0.16299.0, pero solo para compilaciones a través de TeamCity; las compilaciones desde dentro de VS funcionan bien y también lo hace la compilación con MSBuild cuando se inicia desde un símbolo del sistema VS developer. Así que esto no responde exactamente a la pregunta de la OP, pero es tan similar y esta es una de las primeras coincidencias de búsqueda, así que lo agregaré aquí.

Encontró una solución que hace no requiere modificar la instalación de ninguna manera (sin enlazar/copiar menos propenso a errores y fácil de automatizar):

Establezca la variable de entorno VisualStudioVersion en 15.0.

Usted podría hacer esto globalmente usando la gui estándar de Windows para eso (ejemplo para windows 10 aquí) pero yo preferiría fuertemente desaconsejarlo porque podría interferir con otras versiones de VS, además no es un cambio que se automatiza fácilmente ni se registra en su código de compilación y, por lo tanto, es más difícil reproducir omn diferentes máquinas. Una mejor alternativa es establecer esto en el línea de comandos donde se ejecuta la compilación (cmd: set VisualStudioVersion=15.0 PS: $env:VisualStudioVersion = '15.0' en el parámetro TeamCity: add env.VisualStudioVersion). Otra alternativa es pasar este directorio a MSBuild como una propiedad (pass /p:VisualStudioVersion=15.0 o en TeamCity add system.VisualStudioVersion).

 1
Author: stijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-11 09:39:38

Abrir "C:\Program Archivos(x86)\Microsoft Visual Studio 14.0\Common7\Tools \ VsDevCmd.bat " en un editor de texto en modo administrador y cambiar la línea

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

A

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

 0
Author: N3UR0CHR0M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-18 13:13:44