直接ファイルをリンクする
一番楽なのは 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版