programing:c-language:gcc-programing:gcc-library-link-order
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| programing:c-language:gcc-programing:gcc-library-link-order [2022/06/26 08:29] – [参考] yoko | programing:c-language:gcc-programing:gcc-library-link-order [2026/07/28 13:16] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | GCCでのリンク時のライブラリーの順番 | + | ====== |
| - | ================================ | + | |
| GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。 | GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。 | ||
| 又、相互に参照している場合は、ライブラリ指定は2回以上記述しても問題ない。 | 又、相互に参照している場合は、ライブラリ指定は2回以上記述しても問題ない。 | ||
| - | ライブラリの再帰検索 | + | ===== ライブラリの再帰検索 |
| - | ---------------- | + | ライブラリが増えてきて、アーカイブ間で相互参照しているような場合は、ライブラリ指定する順番を見つけ出すのに悩ましい場合がある。 |
| - | ライブラリー増えてきて、ライブラリー間で相互参照しているような場合は、ライブラ指定する順番を見つけ出すのに悩ましい時がある。 | + | そのような時には、下例のように「ライブラリ指定を `--start-group` と `--end-group` オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。 |
| - | そのような場合には、下例のように「ライブラリ指定を `--start-group` と `--end-group` オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。 | + | |
| <code text> | <code text> | ||
| 行 17: | 行 15: | ||
| - | 尚、リンカがコンパイラドライバ (例えば gcc) によって間接的に、リンカが起動される場合、すべてのリンカのコマンドラインオプションは、 `-Wl,` (もしくは特定のコンパイラドライバの適切なオプション) に続いて以下のように指定されなければならない。 | + | 尚、リンカがコンパイラドライバ (例えば gcc) によって間接的に起動される場合、すべてのリンカのコマンドラインオプションは、 `-Wl,` (もしくは特定のコンパイラドライバの適切なオプション) に続いて以下のように指定されなければならない。 |
| <code text> | <code text> | ||
| 行 24: | 行 22: | ||
| - | 補足 | + | ===== 補足 |
| - | ---- | + | |
| * ライブラリファイル名が `libhoge.a` だとすると、GCCでは最初の `lib` と後ろの `.a` は省いて、「`-lhoge`」のようにリンク指定する。 | * ライブラリファイル名が `libhoge.a` だとすると、GCCでは最初の `lib` と後ろの `.a` は省いて、「`-lhoge`」のようにリンク指定する。 | ||
| + | * macOSでは、`--start-group` と `--end-group` のオプションは受け付けてくれない。ただ、Ubuntuのgccほど厳密ではなくてある程度の再帰はみてくれている模様。 | ||
| - | 参考 | + | ===== 参考 |
| - | ---- | + | |
| - | 1. [[https:// | + | - [[https:// |
| - | 2. [[https:// | + | |
| {{tag> | {{tag> | ||
programing/c-language/gcc-programing/gcc-library-link-order.1656199769.txt.gz · 最終更新: by yoko
