10

大規模なプロジェクトがあり、約300のDLLに100万行を超えるコードが含まれています。これまで、VS6を使用してきました。

これで、すべてをVS2008に変換しました。すべてのコンパイル、リンク、さらに重要なのは実行です。

==>ただし...結果としてコンパイルされたOBJファイルはX10大きくなり、リンクが非常に遅くなり、リンカーが1GBを超えるメモリを頻繁にヒットします。

含意の一部は、/bigobjを使用して特定のプロジェクトをコンパイルする必要があるということです。

結果は、デスクトップでの約1:45から3時間までのビルドです。DLLとLIBは、古いVS6ビルドとほぼ同じサイズです。

ここで見つけたものをすべて読みましたが、この問題の解決策は見つかりませんでした。追加のデバッグ情報である場合-私はそれを望んでいません。以前は十分でした。リリースのサイズは大きくなりましたが、それほどではありません...

誰かが何か考えを持っていますか?それとも、プロジェクトをはるかに小さな単位に分割する唯一のオプションですか?リファクタリングは私の唯一の希望ですか?!確かに私が逃した秘密の旗があります...


Edit1(13/07/2012 12:20BST) VS6とVS2008で作成されたObjのdumpbinを比較しました。2008年のものは「静的にリンクしている」ように見えます。VS6では、すべて現在のDLLからのいくつかのシンボルが含まれています。VS2008では、依存している(おそらく)すべてのライブラリからのシンボルが含まれています。ダンプビンのサイズは、VS6とVS2008でそれぞれ66kbと32,000kbです。


4

1 に答える 1

5

デバッグオプションを確認してください。/Z7大きな.OBJファイルが発生/Ziし、同じ情報が別の.PDBファイルに配置されます。

コンパイラオプション/Oiは、組み込み関数をインライン化することで役立つ場合があります。組み込み関数は、リンクする必要がなくなります。memsetとにかくデバッグしたくないでしょう。

オン(並列ビルド)/Gmできるように、オフ(インクリメンタル再構築)をオフにします。/MPまた、オフにし/Gyます。これにより、EXEは小さくなりますが、OBJファイルが大きくなり、リンクが遅くなります。

于 2012-07-12T18:17:41.137 に答える