programing:c-language:gcc-programing:gcc-library-link-order
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
programing:c-language:gcc-programing:gcc-library-link-order [2020/06/26 12:27] – ↷ programing:gcc-programing:gcc-library-link-order から programing:c-language:gcc-programing:gcc-library-link-order へページを移動しました。 yoko | programing:c-language:gcc-programing:gcc-library-link-order [2022/06/26 08:51] – [ライブラリの再帰検索] yoko | ||
---|---|---|---|
行 3: | 行 3: | ||
GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。 | GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。 | ||
- | 又、相互に参照している場合は、ライブラリ指定は2回記述しても問題ない。 | + | 又、相互に参照している場合は、ライブラリ指定は2回以上記述しても問題ない。 |
+ | |||
+ | ライブラリの再帰検索 | ||
+ | ---------------- | ||
+ | ライブラリが増えてきて、アーカイブ間で相互参照しているような場合は、ライブラリ指定する順番を見つけ出すのに悩ましい場合がある。 | ||
+ | そのような時には、下例のように「ライブラリ指定を `--start-group` と `--end-group` オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。 | ||
+ | |||
+ | <code text> | ||
+ | --start-group -lmisc -lhoge -letc --end-group | ||
+ | </ | ||
+ | |||
+ | 但し、このオプションを指定すると、パフォーマンス落ちてリンクに時間がかかる場合があるようです。でも、2つ以上のアーカイブ中で、参照の循環が避けられない場合にはこのオプションを使った方が混乱が少ない。 | ||
+ | |||
+ | |||
+ | 尚、リンカがコンパイラドライバ (例えば gcc) によって間接的に起動される場合、すべてのリンカのコマンドラインオプションは、 `-Wl,` (もしくは特定のコンパイラドライバの適切なオプション) に続いて以下のように指定されなければならない。 | ||
+ | |||
+ | <code text> | ||
+ | gcc -Wl, | ||
+ | </ | ||
補足 | 補足 | ||
行 13: | 行 32: | ||
---- | ---- | ||
- | 1. [[http:// | + | 1. [[https:// |
- | 2. [[http:// | + | 2. [[https:// |
{{tag> | {{tag> | ||
programing/c-language/gcc-programing/gcc-library-link-order.txt · 最終更新: 2022/06/27 08:48 by yoko