web-dev-qa-db-ja.com

Visual Studioで64ビットコンパイラーを使用する

Visual Studio 2017を使用します。プロジェクト(x64をターゲットとする)でエラーが発生します。C1060、コンパイラーのヒープ領域が不足しています。悲しいことに、コンパイルのメモリ制限が存在することがわかりました。

CL.exeを監視する場合、実際には4GBに達する直前に停止します。したがって、CL.exeはデフォルトで32ビットアプリケーションであるように見えます: https://docs.Microsoft.com/en-us/cpp/build/how-to-enable-a-64-コマンドライン上のビットビジュアルcppツールセット

このページを読んだ後、64ビットバージョンのCL.exeにアクセスできるように、「ユニバーサルWindowsプラットフォームワークロード」をインストールしました。しかし、私のプロジェクトをコンパイルしても変更はありません。また、Visual Studioでコンパイラバージョンを選択する単一のオプションが表示されません。

単一のコンパイルユニットに4GB以上を使用できるようにするための回避策が存在する必要があると思いますが、今のところ見つけることができませんでした。どんな助けでも大歓迎です。

編集:デバッグモードで制限に達しました。リリースモードでコンパイルは正常に実行されます。これは理にかなっていると思います。

10
brahmin

デフォルトでは、Visual Studioは32ビットツールチェーンを使用します(つまり、コンパイラーは32ビットであり、64ビット実行可能ファイルをクロスコンパイルします)。 Visual Studio 2015および2017には、すべてのコンパイラ(x86、x64、arm、arm64)の32ビットバージョンと64ビットバージョンの両方が含まれています。

次の2つの方法で、64ビットシステムで64ビットツールチェーンを使用することを選択できます。

  1. ビルドマシンに環境変数を追加します(システム全体またはVS開発者コマンドプロンプトから)。

例えば:

set PreferredToolArchitecture=x64
devenv
  1. vcxprojファイルを編集して、<PreferredToolArchitecture>x64</PreferredToolArchitecture>要素:

例えば:

<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>

Direct3D Game VS Templates のUWP(C++/WinRT)バージョンで2番目のメソッドを使用しますが、UWP(C++/CX)およびWin32バージョンに追加する必要があることに気付きました。 Xbox One XDKは、プラットフォームビルドルールでもこれを自動的に行います。

この質問は過去に回答されていることに注意してください。 Visual StudioでネイティブAMD64ツールチェーンを使用する方法

14
Chuck Walbourn