目次

GCCでのリンク時のライブラリーの順番

GCCで静的リンク時のライブラリ指定の順番には依存性がある。呼び出される側のライブラリーは「後で」リンクする必要があり注意が必要。この指定がうまくいっていないときは「undefined referenceエラー」がでる。

又、相互に参照している場合は、ライブラリ指定は2回以上記述しても問題ない。

ライブラリの再帰検索

ライブラリが増えてきて、アーカイブ間で相互参照しているような場合は、ライブラリ指定する順番を見つけ出すのに悩ましい場合がある。
そのような時には、下例のように「ライブラリ指定を --start-group--end-group オプションで囲んで指定すると、新たな未定義参照がなくなるまで繰返し検索される。

--start-group -lmisc -lhoge -letc --end-group

但し、このオプションを指定すると、パフォーマンス落ちてリンクに時間がかかる場合があるようです。でも、2つ以上のアーカイブ中で、参照の循環が避けられない場合にはこのオプションを使った方が混乱が少ない。

尚、リンカがコンパイラドライバ (例えば gcc) によって間接的に起動される場合、すべてのリンカのコマンドラインオプションは、 -Wl, (もしくは特定のコンパイラドライバの適切なオプション) に続いて以下のように指定されなければならない。

gcc -Wl,--start-group -lmisc -lhoge -letc -Wl,--end-group

補足

参考