同僚と私は数千のクラスを含むプロジェクトを構築しようとしましたが、LNK1102エラー(リンカーのメモリ不足)が発生します。仮想メモリを増やすなど、インターネットでいくつかのヒントを見てきました。私たちは試しましたが、これは役に立ちませんでした。また、コードをコンパイルするときにさまざまな警告レベルを有効にするものもあります。ある男が、警告に対してレベル4を有効にすることを提案しました。どうすればそれができますか?他に提案はありますか?
11 に答える
プレーンCをコンパイルするときに同じ問題が発生しました:
"*LINK : fatal error LNK1102: out of memory*"
私にとっての解決策は、周りのすべての* .pdb(DEBUG)ファイルを削除することでした。その後、すべてが問題なくリンクされました。したがって、おそらくpdbファイルは私の場合は欠陥でした-このリンカーエラーを引き起こす面白い方法での欠陥です。
Project (右クリック) → Properties → Configuration Properties → Linker → Optimization → References → Keep Unreferenced Dataに変更
私のマシンで働いた!
プロジェクトが大きすぎる場合は、プロジェクトをいくつかのコンポーネントに分割します。
これは、メンテナンスにも役立つ場合があります。
これをWindowsマシンで実行している場合は、リンク中にタスクマネージャーを開き、パフォーマンスページに移動します。ページファイルの使用量がいっぱいになるまで増加している場合は、RAMのサイズを少なくとも2倍に増やします。エラーがスローされる前にページファイルがいっぱいにならない場合は、マシンに十分なディスク容量があることを確認してください。
リンカも完了するのに時間がかかると思います。何千もの C++ クラスがあると言っているので、最初に考えたのは、インライン化されたクラス メソッドがたくさんあるかどうかを確認することでした。
これを試して:
最もよく使用される一連のクラスを選択し、ヘッダー ファイルから実装ファイルに移動して、インライン化されたすべてのメソッドを非インライン化します。リンク時間に劇的な変化を経験しました。あるプロジェクトでは、15 分間の純粋なリンクが、わずか 30 秒にまで短縮されました。これは、リンク プロセスのメモリにも影響するはずです。
幸運を!//マグナス
VS 2008 で大きなプロジェクトのインクリメンタル ビルド中に同じエラーが発生しました。プロジェクトをクリーンアップし、すべての *.ilk、*.dll、*.exe、および *.pdb ファイルを削除して、すべてを再度ビルドしました。
リンカーの 64 ビット バージョンを実行しますか? 欠点: amd64 実行可能ファイルを取得します。(32->64 クロスコンパイル ツールセットとは異なり、64->32 ビット ツールセットはありません)
リンク中は、タスクマネージャーで実際のメモリ使用量を確実に監視してください。他のプログラムを閉じて、利用可能な物理メモリを増やし、可能であればページ ファイルのサイズを 4092 MB に設定します。
また、リンク再現を作成すると役立つ場合があります。これにより、他の人がリンクの問題を他のマシンで再現できるようになります。