Visual Studio 2012で、デフォルトのx86_AMD64クロスコンパイラーではなく、ネイティブAMD64ツールチェーンを使用するにはどうすればよいですか?
プログラム全体の最適化とリンク時のコード生成を実行すると、リンカーがメモリ不足になる大きなライブラリを構築しています。
同じ質問をする2つの古い投稿( here および here )を見つけましたが、まだ回答はありません。 Microsoftは、ツールチェーン コマンドライン の指定方法に関するドキュメントを提供していますが、IDEでは提供していません。
Visual Studio 2012 IDEを起動する前に、環境変数 "_IsNativeEnvironment"を "true"に設定する必要があります。
set _IsNativeEnvironment=true
start "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" your_solution.sln
Visual Studio 2013では、環境変数の名前が異なります。
set PreferredToolArchitecture=x64
sbm start "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" your_solution.sln
IDEのバージョンがツールチェーンのバージョンと一致しない場合、この手法は機能しません。つまり、VS2013を使用する場合IDE VS2012コンパイラを実行すると、あなたは運が悪いですが、そのような組み合わせは珍しいです。
詳細については、次のリンクをご覧ください。
Visual Studio 2013のプロジェクトごとに64ビットリンカーの使用を強制する別の方法があります。vcxprojファイルを編集し、<Import...Microsoft.Cpp.Defaults
行の後に以下を挿入します。
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
目的が具体的にAMD64_x86
ではなくnative環境を使用することである場合、プロジェクトファイルでUseNativeEnvironment
プロパティを設定できます。
<PropertyGroup>
<UseNativeEnvironment>true</UseNativeEnvironment>
</PropertyGroup>
(「Globals」PropertyGroupに正常に追加しました。)
/Bv
コンパイラー・オプションを追加することにより、どのツールチェーンが使用されているかを確認できます。出力例を以下に示します。 toolchainディレクトリはbin\
(この場合はAMD64_x86
)の後に表示されることに注意してください。
2>ClCompile:
2> Compiler Passes:
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\CL.exe: Version 18.00.31101.0
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\c1.dll: Version 18.00.31101.0
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\c1xx.dll: Version 18.00.31101.0
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\c2.dll: Version 18.00.31101.0
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\link.exe: Version 12.00.31101.0
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64\mspdb120.dll: Version 12.00.31101.0
2> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\1033\clui.dll: Version 18.00.31101.0
私はこれがかなり古い投稿であることを知っていますが、それでもVS 2017に関連しています。ここでも、「PreferredToolArchitecture」環境変数があり、IDE 。
ただし、プロジェクトベースごとにプロジェクトに簡単に統合できるため、使用するツールアーキテクチャを常に選択できます。多分これはいくつかのために役立ちます。これを行う:
コンパイラパス:
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\CL.exe:バージョン19.15.26730.0
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c1.dll:バージョン19.15.26730.0
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c1xx.dll:バージョン19.15.26730.0
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c2.dll:バージョン19.15.26730.0
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\link.exe:バージョン14.15.26730.0
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\mspdb140.dll:バージョン14.15.26730.0
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\1033\clui.dll:バージョン19.15.26730.0
HTH
編集:残念ながら、これは信頼できません!以下のコメントを参照してください。 MSがこの設定をいくつかのGUI要素に関連付け、一貫して機能させるようにしていただければ幸いです...
XP 64 SP2でVisual Studio 2010を使用して同様の問題があります。VC++実行可能ディレクトリをAMD64 bin(ネイティブx64フォルダー)に検索パスの最初として設定した場合、 TRK0002エラーを受け取りました…無効なハンドル値。
しかし、Visual Studio 2010のコマンドプロンプトで_IsNativeEnvironment = trueを設定し、以前に投稿したようにコマンドラインからIDEを開始すると、エラーは発生しなくなります。どうやら、32ビットGUI IDE環境は64ビットプロセスから情報を受け取り、x86\cl.exeやx86_64\cl.exeなどの32ビットプロセスからの情報を期待しています。
IA64ビット実行可能ファイルをコンパイルするシナリオで、x86_ia64\cl.exeコンパイラを使用します。 32ビットクロスコンパイラーを使用していて、_IsNativeEnvironment変数がtrueに設定されているため、メッセージをそのウィンドウコンソールに投稿するときに、IDEを混乱させる必要があります。もし、以前にtrueに設定しました。
IDEは、ネイティブコンパイラがネイティブ64ビットマシンで使用されていることを認識し、IDEからネイティブコンパイラが選択されたときに、この変数を適切な値に自動的に設定する必要があります。Aこの問題にパッチを適用するために、単純な修正は適用されていません。解決策:プロンプトから自分で行うか、Microsoftから最新のIDE=を購入して問題を修正してください。
したがって、Microsoftの実際のウィザードは、主にコマンドラインから作業する開発者です。そして、先のとがった帽子をかぶって隅に座っている他の開発者は、Apple=)から雇われたに違いなく、機能よりも外見に関心がありました。
IDEの目的は、コーディングを単純にすることであり、コマンドラインからテキストエディタとMakefileを使用するよりも複雑ではありません。