2016-07-25 5 views
0

私は、何百ものexcecutablesを持つシステムで作業しています。各実行可能ファイルは、さまざまな.aライブラリを静的に完全にリンクします。共有ライブラリは現在オプションではありません。完全に再構築するのはかなり遅いです。各実行ファイルは再リンクされなければならず、数百もあるので、ボトルネックはリンクしているようです。ライブラリを1つのライブラリにリンクして内部関数呼び出しを解決できますか?

内部関数呼び出しが解決されたすべてのライブラリの「マスター」ライブラリを作成し、バイナリをリンクするときにこのマスターライブラリを使用できますか?内部ライブラリ呼び出しが既に解決されているため、時間が節約されるという考えがあります。 (図書館間には多くの呼び出しがあります)。

私はclangを使用していません。インクリメンタルリンクがオプションであるとは思われません。

答えて

2

それは

に確かに "マスター" のライブラリを作成することが可能です:ld -r -o master.o --whole-archive libfoo.a libbar.a ...はそれを行う必要があります。

各バイナリが大きくなる可能性があります(explanation)。

さらに、ELFを使用している場合は、(新)Gold linkerを使用するとかなり高速なリンクが表示されることがあります。

最後に、たくさんのRAMを搭載した強力なマシン上に構築する場合は、make -j12以上を実行すると、多くのリンクを並行して実行することで処理速度が大幅に向上します。これには、正確なMakefile構造と正しい依存関係が必要です(はあなたのビルドの正確さのためにとにかくが必要です)。

関連する問題