web-dev-qa-db-fra.com

Utiliser un compilateur 64 bits dans Visual Studio

J'utilise Visual Studio 2017. Dans un projet (que je cible en tant que x64), j'obtiens une erreur: C1060, le compilateur manque d'espace de stockage et, malheureusement, il se trouve qu'il existe une limitation de mémoire pour la compilation.

Lors de la surveillance de CL.exe, il s'arrête en effet juste avant d'atteindre 4 Go. Il semble donc que CL.exe soit par défaut une application 32 bits, comme indiqué sur: https://docs.Microsoft.com/en-us/cpp/build/how-to-enable-a-64- bit-visual-cpp-toolset-on-the-command-line

Après avoir lu cette page, j'ai installé la "charge de travail de la plateforme Windows universelle" en espérant avoir accès à une version 64 bits de CL.exe. Mais aucun changement lors de la compilation de mon projet, et je ne vois aucune option dans Visual Studio pour choisir la version du compilateur.

Je suppose qu'il doit exister une solution de contournement pour pouvoir utiliser plus de 4 Go pour une seule unité de compilation, mais je ne l'ai pas trouvé pour l'instant. Toute aide serait très appréciée.

Edit: j'ai atteint la limitation en mode Debug. La compilation se passe bien en mode Release. Ce qui est sensé.

10
brahmin

Par défaut, Visual Studio utilise la chaîne d'outils 32 bits (c'est-à-dire que le compilateur est 32 bits et compile de manière croisée des exécutables 64 bits). Visual Studio 2015 et 2017 incluent les versions 32 bits et 64 bits de tous les compilateurs (x86, x64, arm, arm64).

Vous pouvez choisir d'utiliser la chaîne d'outils 64 bits sur un système 64 bits par deux méthodes:

  1. Ajoutez une variable d'environnement sur votre machine de génération (à l'échelle du système ou à partir d'une invite de commande VS Developer).

Par exemple:

set PreferredToolArchitecture=x64
devenv
  1. Vous pouvez également éditer vos fichiers vcxproj avec le <PreferredToolArchitecture>x64</PreferredToolArchitecture> élément:

Par exemple:

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v141</PlatformToolset>
    <PreferredToolArchitecture>x64</PreferredToolArchitecture>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>

J'utilise la deuxième méthode dans les versions UWP (C++/WinRT) de mes Direct3D Game VS Templates , et je viens de remarquer que je devrais l'ajouter à mes versions UWP (C++/CX) et Win32. La Xbox One XDK le fait automatiquement dans ses règles de construction de plate-forme.

Notez que cette question a reçu une réponse dans le passé: Comment faire pour que Visual Studio utilise la chaîne d'outils AMD64 native

14
Chuck Walbourn