programing:c-language:gcc-programing:gcc-library-link-order
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
programing:c-language:gcc-programing:gcc-library-link-order [2022/06/26 08:23] – [ライブラリの再帰検索] yoko | programing:c-language:gcc-programing:gcc-library-link-order [2022/06/27 08:48] (現在) – yoko | ||
---|---|---|---|
行 7: | 行 7: | ||
ライブラリの再帰検索 | ライブラリの再帰検索 | ||
---------------- | ---------------- | ||
- | ライブラリー増えてきて、ライブラリー間で相互参照しているような場合は、ライブラ指定する順番を見つけ出すのに悩ましい時がある。 | + | ライブラリが増えてきて、アーカイブ間で相互参照しているような場合は、ライブラリ指定する順番を見つけ出すのに悩ましい場合がある。 |
- | そのような場合には、下例のように「ライブラリ指定を `--start-group` と `--end-group` オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。 | + | そのような時には、下例のように「ライブラリ指定を `--start-group` と `--end-group` オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。 |
<code text> | <code text> | ||
行 15: | 行 15: | ||
但し、このオプションを指定すると、パフォーマンス落ちてリンクに時間がかかる場合があるようです。でも、2つ以上のアーカイブ中で、参照の循環が避けられない場合にはこのオプションを使った方が混乱が少ない。 | 但し、このオプションを指定すると、パフォーマンス落ちてリンクに時間がかかる場合があるようです。でも、2つ以上のアーカイブ中で、参照の循環が避けられない場合にはこのオプションを使った方が混乱が少ない。 | ||
+ | |||
+ | |||
+ | 尚、リンカがコンパイラドライバ (例えば gcc) によって間接的に起動される場合、すべてのリンカのコマンドラインオプションは、 `-Wl,` (もしくは特定のコンパイラドライバの適切なオプション) に続いて以下のように指定されなければならない。 | ||
+ | |||
+ | <code text> | ||
+ | gcc -Wl, | ||
+ | </ | ||
行 21: | 行 28: | ||
* ライブラリファイル名が `libhoge.a` だとすると、GCCでは最初の `lib` と後ろの `.a` は省いて、「`-lhoge`」のようにリンク指定する。 | * ライブラリファイル名が `libhoge.a` だとすると、GCCでは最初の `lib` と後ろの `.a` は省いて、「`-lhoge`」のようにリンク指定する。 | ||
+ | * macOSでは、`--start-group` と `--end-group` のオプションは受け付けてくれない。ただ、Ubuntuのgccほど厳密ではなくてある程度の再帰はみてくれている模様。 | ||
参考 | 参考 | ||
---- | ---- | ||
- | 1. [[http:// | + | 1. [[https:// |
- | 2. [[http:// | + | 2. [[https:// |
{{tag> | {{tag> | ||
programing/c-language/gcc-programing/gcc-library-link-order.1656199423.txt.gz · 最終更新: 2022/06/26 08:23 by yoko