web-dev-qa-db-ja.com

--start-groupおよび--end-groupコマンドラインオプションとは何ですか?

これらのコマンドラインオプションの目的は何ですか?次のコマンドラインの意味を理解するのを手伝ってください:

-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib

どうやらそれはリンクに関係しているようですが、GNUマニュアルは正確にグループ化が意味するものは静かです。

73
pic11

複数のライブラリー間の循環依存関係を解決するためのものです(-(-)の間にリストされています)。

引用 ライブラリがリンクされる順序がGCCでエラーを引き起こすことがあるのはなぜですか? またはman ldhttp://linux.die.net/man/1/ld =

-(archives-)または--start-grouparchives--end-group

archivesは、アーカイブファイルのリストである必要があります。明示的なファイル名、または-lオプションのいずれかです。

指定されたアーカイブは、新しい未定義の参照が作成されなくなるまで繰り返し検索されます。通常、アーカイブは、コマンドラインで指定された順序で1回だけ検索されます。コマンドラインに後で表示されるアーカイブ内のオブジェクトによって参照される未定義のシンボルを解決するために、そのアーカイブ内のシンボルが必要な場合、リンカーはその参照を解決できません。アーカイブをグループ化することにより、すべての可能な参照が解決されるまで、それらはすべて繰り返し検索されます。

このオプションを使用すると、パフォーマンスが大幅に低下します。 2つ以上のアーカイブ間で避けられない循環参照がある場合にのみ使用することをお勧めします。

そのため、グループ内のライブラリは新しいシンボルを何度も検索でき、-llib1 -llib2 -llib1のようない構成要素は必要ありません。

PSアーカイブは、基本的に静的ライブラリ(*.aファイル)を意味します

87
osgx