今回実験した環境は
$ uname -a FreeBSD * 7.1-RELEASE FreeBSD 7.1-RELEASE #5: Tue Jan 6 02:28:50 JST 2009
ちょっと古いircdだが、ircd2.11.0+jp8.tgzを使った際、makeできない問題があった。同様に、ircd2.11.1p0 でも同様の問題が確認されている。
gcc -o ircd bsd.o dbuf.o packet.o send.o match.o parse.o support.o version.o channel.o \ class.o hash.o ircd.o list.o res.o s_auth.o s_bsd.o s_conf.o s_debug.o s_err.o s_id.o \ s_misc.o s_numeric.o s_send.o s_serv.o s_service.o s_user.o s_zip.o whowas.o res_init.o \ res_comp.o res_mkquery.o -lz -lcrypt hash.o(.text+0x10cc): In function `bigger_prime': ../ircd/hash.c:219: undefined reference to `sqrt' ircd.o(.text+0x4e9): In function `calculate_preference': ../ircd/ircd.c:388: undefined reference to `pow' s_bsd.o(.text+0x2791): In function `read_message': ../ircd/s_bsd.c:3237: undefined reference to `pow'
原因は、解決方法としては、libm が足りないため、Makefileに追加する。
FreeBSD6.4 までは問題が出ていないが、FreeBSD7.X以降でこの問題が出るようになっているため、どこかの仕様変更があったのではないかと思われる。
*** Makefile.orig 2009-01-14 13:13:28.000000000 +0900 --- Makefile 2009-01-14 13:14:07.000000000 +0900 *************** *** 42,48 **** LDFLAGS = # required libraries, except zlib LIBS = -lcrypt ! MATHLIBS = # zlib, eventually ZLIBS = -lz # for DSM support (dlopen(), dlsym(), dlclose()) --- 42,48 ---- LDFLAGS = # required libraries, except zlib LIBS = -lcrypt ! MATHLIBS = -lm # zlib, eventually ZLIBS = -lz # for DSM support (dlopen(), dlsym(), dlclose())
とすればよい。この辺についての詳細は、man pow を参照されたし。
尚、ircd2.11.1 以降では修正されていた。