Microsoft のソースによると、ILK サイズにはいくつかのハード サイズ制限がありますが、VS のバージョンと OS 環境によってある程度異なります。
- VS2005 には 256MB の ILK ファイル制限があります
- VS2008 には、標準の Win32 OS で 256MB の ILK ファイル制限があります。または
/3GB
オプションを使用して Win32 OS で実行している場合は 384MB の制限、または
- Win64 OS で実行している場合は 768MB の制限
出典:この MS Connect インシデント レコード/3GB
では、 を使用する際の考慮すべきいくつかの欠点についても言及されています。
Win64 OS で実行しているため (コメントによると)、おそらく最大の ILK ファイル サイズの制限を受けていると思います。この/3GB
オプションは 32 ビット OS のインストールにのみ適用されます。WoW64 32 ビットの「ラージ アドレス対応」アプリケーションで実行すると、4 GB のアドレス空間がすべて取得され/3GB
ます。オプションは必要ありません。
しかし、待ってください - 私にはアイデアがあります (おそらく頭脳明晰なアイデアです)。これが実際にあなたが遭遇しているインクリメンタル リンクの問題を解決するために機能するかどうかはわかりません。
x64 ネイティブ リンカーを使用して問題を回避できるかどうかを確認することをお勧めします。x64 コンパイラ オプションをインストールすると、VS は、x86/x64 ターゲットと x86/x64 ホスト プラットフォームのさまざまな組み合わせに対して、コンパイラ/リンク ツールのセットをいくつかインストールします。コンパイラに関する限り、x86 コードを生成するには Win32 コンパイラしかありませんが、x64 コードを生成するには、Win64 コンパイラと Win32 の「クロス コンパイラ」ツールチェーンの両方があります。ただし、リンカーの場合、いずれかのリンカー (Win32 または Win64 - リンカーの「クロス」バージョンは単に Win32 バージョンのコピーです) が x86 または x64 ターゲットを生成できるようです。
ネイティブの Win64 リンカがネイティブの Win32 リンカよりも大きな ILK ファイルを処理できるとしても、それほど驚かないので、現在のビルド プロセスで Win32 (または Win32 の「クロス」) ツールを使用しているかどうかをテストする価値があるかもしれません。
VC\bin\amd64
x64 をターゲットにしている場合は、ビルド プロセスで のクロス ツールではなく、ネイティブの x64 ツールを使用していることを確認してくださいVC\bin\x86_amd64
。通常の VS IDE C++ プロジェクトを使用してビルドしている場合は、ネイティブ x64 ツールを強制的に使用するためにメイクファイル プロジェクトに切り替える必要がある場合があります。
x86 をターゲットにしている場合は、少し複雑になる可能性があります。ビルドのコンパイル ステージでは で x86 ツールを使用するVC\bin
必要がありますが、リンク ステージでは で x64 ネイティブ リンカーを使用する必要がありますVC\bin\amd64
。オプションを指定し/machine:x86
、x64 ライブラリではなく x86 ライブラリを検索するようにライブラリ検索パスが設定されていることを確認します。これは機能します-少なくとも小さなテストプログラムでは。しかし、私が言ったように、それが実際にあなたが遭遇しているインクリメントリンクの問題を解決するかどうか、またはたとえそうであってもトラブルに見合うだけの価値があるかどうかはわかりません.