新石器Wiki

近年はシリコン(石)から進化した便利なもので溢れる時代。そんな気になった事や試した事など記す。

ユーザ用ツール

サイト用ツール


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 へページを移動しました。 yokoprograming:c-language:gcc-programing:gcc-library-link-order [2022/06/27 08:48] (現在) yoko
行 3: 行 3:
 GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。 GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。
  
-又、相互に参照している場合は、ライブラリ指定は2回記述しても問題ない。+又、相互に参照している場合は、ライブラリ指定は2回以上記述しても問題ない。 
 + 
 +ライブラリの再帰検索 
 +---------------- 
 +ライブラリが増えてきて、アーカイブ間で相互参照しているような場合は、ライブラリ指定する順番を見つけ出すのに悩ましい場合がある。   
 +そのような時には、下例のように「ライブラリ指定を `--start-group` と `--end-group` オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。 
 + 
 +<code text> 
 +--start-group -lmisc -lhoge -letc --end-group 
 +</code> 
 + 
 +但し、このオプションを指定すると、パフォーマンス落ちてリンクに時間がかかる場合があるようです。でも、2つ以上のアーカイブ中で、参照の循環が避けられない場合にはこのオプションを使った方が混乱が少ない。 
 + 
 + 
 +尚、リンカがコンパイラドライバ (例えば gcc) によって間接的に起動される場合、すべてのリンカのコマンドラインオプションは、 `-Wl,` (もしくは特定のコンパイラドライバの適切なオプション) に続いて以下のように指定されなければならない。 
 + 
 +<code text> 
 +gcc -Wl,--start-group -lmisc -lhoge -letc -Wl,--end-group 
 +</code> 
  
 補足 補足
行 9: 行 28:
  
   * ライブラリファイル名が `libhoge.a` だとすると、GCCでは最初の `lib` と後ろの `.a` は省いて、「`-lhoge`」のようにリンク指定する。   * ライブラリファイル名が `libhoge.a` だとすると、GCCでは最初の `lib` と後ろの `.a` は省いて、「`-lhoge`」のようにリンク指定する。
 +  * macOSでは、`--start-group` と `--end-group` のオプションは受け付けてくれない。ただ、Ubuntuのgccほど厳密ではなくてある程度の再帰はみてくれている模様。
  
 参考 参考
 ---- ----
  
-1. [[http://www.hakodate-ct.ac.jp/~tokai/tokai/gtkmm/etc/p1.htm|静的ライブラリのリンク時にundefined referenceエラーが出る(gcc)]] +1. [[https://ambiesoft.com/blog/archives/4307|GCCのスタティックリンクの順番は大事]] 
-2. [[http://ambiesoft.fam.cx/blog/archives/4307|GCCのスタティックリンクの順番は大事]]+2. [[https://nxmnpg.lemoda.net/ja/1/ld?utm_source=pocket_mylist|manページ  — LD]] 
  
 {{tag>gcc}} {{tag>gcc}}
  
programing/c-language/gcc-programing/gcc-library-link-order.1593142073.txt.gz · 最終更新: 2020/06/26 12:27 by yoko