« Return to Thread: [ruby-dev:38731] FreeBSD で ruby-mecab のライブラリ参照の不具合

[ruby-dev:38737] Re: FreeBSD で ruby-mecab のライブラリ参照の不具合

by Makoto Kishimoto :: Rate this Message:

Reply to Author | View in Thread

きしもとです

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

という行を追加してみたところ、うまく動くようになりました。
なぜ私の環境でだけ起きているのか謎ですが...

 « Return to Thread: [ruby-dev:38731] FreeBSD で ruby-mecab のライブラリ参照の不具合