8

私はC++ビルドフローにかなり慣れていないので、arアーカイブを作成する代わりに、ライブラリに部分的なリンクを使用するように切り替えることを考えています。私が持っている必然的な最終コンパイルステップでリンク時間を短縮したいと思っています。一部のライブラリを一度部分的にリンクすると、その最終ステップですべてをリンクするよりも時間を節約できると思います。

私が説明していることは可能ですか?私はそれが線に沿った何かであるべきだと思いますld -Ur -o mylib.o [components]。私が考慮していない重要なビルドの考慮事項はありますか?

4

2 に答える 2

7

オブジェクトファイルをアーカイブに含めるという重要な効果が失われますar。つまり、参照されるオブジェクトのみがにリンクされます。

アーカイブにfoo.oシンボルfooとbar.oの両方があり、シンボルのみを参照している場合は、リンクされるだけです。代わりに部分的なリンクを行うと、両方のコンテンツが実行可能ファイルになります。どこにも参照されていない場合。bararfoofoo.obar

また、 goldなどのより高速なリンカーを試すこともできます。

于 2008-11-07T01:41:18.520 に答える
0

ld -rを使用して部分リンクを実行する場合は、特定の機能を提供するために必要であるが、どのコードからも直接呼び出されない静的初期化を含むオブジェクトファイルがある場合です。

よろしければ、これがどのように機能し、なぜ機能するのかを紹介するドキュメントを作成できます。

(たとえば、実行時のC ++クラス登録を参照してください。これは、レジストリに自身を登録する静的レジスタ関数を使用します。この関数を使用して、Baseから継承された新しいオブジェクトを作成したため、多態的な動作をするBase*を作成して返すことができます。私が尋ねた質問への答えであるクラスのC++ランタイム知識を参照してください。)

于 2010-10-16T01:55:52.180 に答える