[ruby-dev:38737] Re: FreeBSD で ruby-mecab のライブラリ参照の不具合
きしもとです
mkmf.log を見たところ、こんな感じでした。
have_library: checking for main() in -lmecab... -------------------- no
"cc -o conftest -I. -I/usr/local/lib/ruby/1.8/amd64-freebsd7 -I. -O2 -fno-strict-aliasing -pipe -fPIC conftest.c -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L. -rdynamic -lruby18-static -lmecab -lrt -lcrypt -lm -rpath=/usr/lib:/usr/local/lib "
/usr/local/lib/libmecab.so: undefined reference to `pthread_create'
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
/* end */
"cc -o conftest -I. -I/usr/local/lib/ruby/1.8/amd64-freebsd7 -I. -O2 -fno-strict-aliasing -pipe -fPIC conftest.c -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L. -rdynamic -lruby18-static -lmecab -lrt -lcrypt -lm -rpath=/usr/lib:/usr/local/lib "
/usr/local/lib/libmecab.so: undefined reference to `pthread_create'
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { main(); return 0; }
/* end */
libmecab の pthread_create が解決できないのが原因のようです。
trunk から入れてある、ruby19 ではうまくいくので、それとおもわれる
相違点をさがしたところ、-lthr がコマンドラインにあるかどうかの差でした。
extconf.rb に
$LIBS = '-lthr ' + $LIBS
という行を追加してみたところ、うまく動くようになりました。
なぜ私の環境でだけ起きているのか謎ですが...