揮発性のメモ2

http://d.hatena.ne.jp/iww/

静的ライブラリをリンクする

直接ファイルをリンクする

一番楽なのは libhoge.a を直接指定してリンクする
静的ライブラリを後ろに書くのがコツ

良い例

$ cc -lrt  sample.o libhoge.a   -o sample

悪い例

$ cc -lrt  libhoge.a sample.o   -o sample

sample.o: In function `my_send':
/home/unko/sample.c:92: undefined reference to `hoge_send'

静的ライブラリのリンク時にundefined referenceエラーが出る(gcc)
静的ライブラリ (.a) の作成と利用

リンカオプションで指定する

せっかくの静的ライブラリなので -lhoge オプションを付けてリンクする
良い例

$ cc -L. -lrt  sample.o   -lhoge -o sample

悪い例

$ cc -L. -lrt -lhoge  sample.o   -o sample

sample.o: In function `my_send':
/home/unko/sample.c:92: undefined reference to `hoge_send'


静的ライブラリに対する-lオプションの扱いは、そこに直接 .aファイル名を書くこととほぼ同義となる。
動的ライブラリは実行時にわちゃわちゃするので、コンパイル時はどこにオプションあってもセーフ

$ cc -L. -lrt -lhoge     sample.o   -o sample

$ cc -L. -lrt libhoge.a  sample.o   -o sample

リンカオプション
リンク処理用のオプション

Makefileの書き方

リンカ用オプションを書くとき、LDFLAGS は前に、LDLIBS は後ろにオプションが付く
特に問題ないなら LDLIBS を使うようにした方が無難。 CFLAGS と統一感無いけど、そこは目を瞑る

良い例

LDLIBS   += -lrt -lhoge
$ cc   sample.o  -L. -lrt -lhoge -o sample

悪い例

LDFLAGS += -L. -lrt -lhoge
$ cc -L. -lrt -lhoge  sample.o   -o sample

sample.o: In function `my_send':
/home/unko/sample.c:92: undefined reference to `hoge_send'

Makefile の補足
Makefileの書き方に関する備忘録 その3 - minus9d's diary
GNU-Make-第3版