1. ホーム
  2. gcc

[解決済み] コマンドラインオプションの--start-groupと--end-groupとは何ですか?

2023-05-13 02:31:35

質問

コマンドラインオプションの目的は何ですか?以下のコマンドラインの意味を読み解くのにお役立てください。

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

どうやらリンクと関係があるようですが、GNUのマニュアルではグループ化とは一体何を意味するのかが不明です。

どのように解決するのですか?

複数のライブラリ間の循環的な依存関係を解決するためのものです。 -(-) ).

引用元 なぜ、ライブラリのリンクの順番がGCCでエラーを引き起こすことがあるのですか? あるいは man ld http://linux.die.net/man/1/ld

-( アーカイブス -) または --start-group アーカイブス --end-group

アーカイブス は、アーカイブファイルのリストでなければなりません。これらは明示的なファイル名か、-l オプションでなければなりません。

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

このオプションを使用すると、かなりのパフォーマンス コストが発生します。2 つ以上のアーカイブの間で避けられない循環参照がある場合にのみ使用するのが最善です。

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

PS アーカイブとは、基本的に静的ライブラリ ( *.a ファイル)