RAM の制限に達したばかりの場合は、おそらくディスクの動作を聞くことができ、システム アクティビティ モニターがそれを知らせてくれます。しかし、リンクがまだ CPU バウンドである場合 (つまり、CPU 使用率がまだ高い場合)、それは問題ではありません。また、リンクが IO バウンドである場合、最も一般的な原因はランタイム情報である可能性があります。とにかく実行可能サイズを見てください。
別の方法で問題に答えるには、テンプレートを頻繁に使用していますか? 異なる型パラメーターを持つテンプレートを使用するたびに、テンプレート全体の新しいインスタンスが生成されるため、リンカーの作業が増えます。ただし、これを実際に目立たせるには、テンプレートが非常に多いライブラリを使用する必要があります。Boost プロジェクトの多くのものが該当します - Boost::Spirit を複雑な文法で使用すると、テンプレート ベースのコードが肥大化します。そして、7,7M の実行可能ファイルにコンパイルされた約 4000 行のコード - 1 行を変更すると、必要な特殊化の数と最終的な実行可能ファイルのサイズが 2 倍になりました。ただし、インライン化は大いに役立ち、1.9M の出力につながりました。
共有ライブラリが他の問題を引き起こしている可能性があります。-fvisibility=hidden のドキュメントを参照すると、とにかくコードが改善されます。-fvisibility の GCC マニュアルから:
Using this feature can very substantially
improve linking and load times of shared object libraries, produce
more optimized code, provide near-perfect API export and prevent
symbol clashes. It is *strongly* recommended that you use this in
any shared objects you distribute.
実際、リンカーは通常、アプリケーションまたは他のライブラリがライブラリに定義されたシンボルをオーバーライドする可能性をサポートする必要がありますが、通常、これは意図された使用法ではありません。それを使用するのは無料ではありませんが、(些細な) コード変更が必要であることに注意してください。
ドキュメントで提案されているリンクは次のとおりです。http://gcc.gnu.org/wiki/Visibility