149 votes

Visual Studio ne peut pas construire à cause de rc.exe

J'ai cherché en ligne et je n'ai rien trouvé qui ressemble à mon problème.

J'ai créé un projet C++ vide et ajouté un main.cpp avec un retour et je n'arrive pas à le construire. Voici le message que je reçois :

1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>LINK : fatal error LNK1158: cannot run 'rc.exe'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Y a-t-il un endroit dans VS2012 où je peux spécifier où trouver cet exécutable ? J'ai installé le SDK de Windows 7 et j'ai cet exécutable à l'emplacement suivant :

C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin

Je viens de Code::Blocks et j'utilise mingw-gcc sans aucun problème, mais dernièrement j'ai eu besoin de VS pour des implémentations gérées donc j'espère que quelqu'un a une idée.

0voto

Tom Points 1

"L'erreur LNK1158 cannot run 'rc.exe' peut provenir du fait que votre projet a été ouvert par une version plus récente de MS VS. Par exemple, votre projet a été créé dans VS 2015, puis plus tard a été ouvert par 2017. Puis, plus tard, votre projet est ouvert en 2015.

Pour résoudre ce problème, ouvrez le fichier yourProjectName.vcxproj, recherchez les éléments suivants WindowsTargetPlatformVersion et passer à la version correcte de VS

Pour VS 2015, il devrait être 8.1 pour VS 2017, il devrait être 10.0.17763.0

0voto

UweBaemayr Points 128

Il y a beaucoup de réponses ici, mais je n'ai pas vu celle-là, qui, je crois, est la bonne façon de corriger ce bogue de Visual Studio. J'ai récemment dû installer Visual Studio 2015 sur un système qui disposait déjà de Visual Studio 2017 et 2019 ainsi que de plusieurs versions du SDK Windows. Lors de la construction soit x86 ou x64/debug ou release, il ne pouvait pas trouver RC.EXE. La raison en est que le chemin d'accès à l'exécutable du projet (le chemin d'accès à l'exécutable du projet). $(VS_ExecutablePath) ) est incorrecte. Pour x86 et x64, elle est fixée à

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

ce qui semble être correct si 10 est remplacé par 8.1 mais je veux utiliser le SDK Windows 10 et non le SDK Windows 8.1.

Les exécutables du SDK de Windows 10 se trouvent en fait dans ces répertoires (c'est-à-dire que ce sont les SDK que j'ai installés en ce moment) :

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\arm64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\arm64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\arm64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\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
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\RC.Exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64\RC.Exe

Dans les SDK de Windows 10, le TargetPlatformVersion fait partie du chemin d'accès, ce qui permet de mettre à jour les exécutables/include/libs du SDK pour chaque nouveau fichier TargetPlatform dès sa sortie.

Choisir un RC.EXE et le copier dans un répertoire dans le chemin d'accès fonctionnerait mais chaque TargetPlatformVersion Le répertoire du SDK a une RC.EXE Il est donc possible que vous ne sachiez pas lequel vous utilisez, surtout si vous avez plusieurs développeurs et plusieurs machines de construction. Il est préférable de le corriger dans les projets.

Pour réparer cela,

  • Sélectionnez tous les projets concernés avec Shift-Click.
  • Cliquez avec le bouton droit de la souris sur un projet sélectionné et sélectionnez Propriétés,
  • Sélectionnez les répertoires VC++ sur la gauche
  • Sélectionner les répertoires exécutables
  • Cliquez sur le menu déroulant à l'extrême droite et sélectionnez Editer.

Double-cliquez sur la ligne vide du haut et pour les projets x86/win32, ajoutez ceci aux configurations Debug et Release :

  $(WindowsSdkDir)bin\$(TargetPlatformVersion)\x86\

Pour les projets x64, ajoutez ceci aux configurations Debug et Release :

  $(WindowsSdkDir)bin\$(TargetPlatformVersion)\x64\

Laissez la case "Hériter des valeurs par défaut du parent ou du projet" cochée. La fenêtre "Valeur évaluée" peut apparaître brouillée, mais elle semble être corrigée dès que vous enregistrez et fermez les pages de propriétés.

Je n'ai pas eu à mettre à jour "Library Directories" ni "Include Directories" mais ils pourraient nécessiter des changements similaires.

Cela va créer un certain nombre d'entrées dans chaque fichier de projet Visual Studio qui ressemblent à ceci :

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ExecutablePath>$(WindowsSdkDir_10)bin\$(TargetPlatformVersion)\x86\;$(ExecutablePath)</ExecutablePath>
  </PropertyGroup>    

La bonne façon de résoudre ce problème est de modifier la feuille de propriétés de l'utilisateur. Microsoft.Cpp.Win32.user ou de définir votre propre feuille de propriétés pour ajouter cette valeur aux valeurs héritées, mais le gestionnaire de propriétés de Visual Studio 2015 semble être bogué (2017/2019 est bien meilleur), donc j'ai trouvé qu'il était préférable de simplement mettre la valeur directement dans les projets. Cela signifie également que tout autre développeur ou machine de construction qui utilise ces projets sera en mesure de construire, tant que le SDK Windows 10 choisi est installé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X