34

デフォルトの x86_amd64 クロスコンパイラではなく、ネイティブの amd64 ツールチェーンを Visual Studio 2012 で使用するにはどうすればよいですか?

プログラム全体の最適化とリンク時のコード生成を行うときにリンカーがメモリ不足になる大きなライブラリを構築しています。

これと同じ質問をしている2 つの古い投稿 (ここここ) を見つけましたが、まだ回答がありません。Microsoft は、IDE ではなくコマンド ラインでツールチェーンを指定する方法に関するドキュメントを提供しています。

4

5 に答える 5

37

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 のバージョンがツールチェーンのバージョンと一致しない場合、この手法は機能しないことに注意してください。つまり、VS2012 コンパイラを実行するように構成された VS2013 IDE を使用する場合は、うまくいきません。しかし、そのような組み合わせはまれです。

詳細については、次のリンクを参照してください。

VS12とVS13の違い

VS13 で PreferredToolArchitecture をプロジェクトに埋め込む方法

于 2014-05-21T20:22:11.883 に答える
0

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 に設定した場合は、_IsNativeEnvironment=false を設定します。

IDE は、ネイティブ コンパイラがネイティブ 64 ビット マシンで使用されていることを検出し、ネイティブ コンパイラが IDE から選択されたときに、この変数を適切な値に自動的に設定する必要があります。この問題にパッチを適用するための簡単な修正は適用されていません。解決。プロンプトから自分で行うか、Microsoft から最新の IDE を購入して問題を解決してください。

したがって、Microsoft の真の魔法使いは、主にコマンド ラインから作業する開発者です。そして、尖った帽子をかぶって隅に座っている他の開発者は、Apple から雇われたに違いなく、機能よりも外観に関心がありました。

IDE の全体的な目的は、コーディングを単純にすることであり、コマンド ラインからテキスト エディターと Makefile を使用するよりも複雑ではありません。

于 2019-01-08T19:59:33.933 に答える