|
View:
New views
6 Messages
—
Rating Filter:
Alert me
|
|
|
[ruby-dev:38731] FreeBSD で ruby-mecab のライブラリ参照の不具合きしもとです
FreeBSD7.2 (RELENG_7) で、CVS から取ってきた ports を使っています。 Ruby のバージョンは $ ruby --version ruby 1.8.7 (2009-04-08 patchlevel 160) [amd64-freebsd7] となっています。 ruby-mecab のビルドで、 [/usr/ports/japanese/ruby-mecab]$ make configure ===> ja-ruby18-mecab-0.97 depends on file: /usr/local/bin/ruby18 - found ===> ja-ruby18-mecab-0.97 depends on shared library: mecab.1 - found ===> Configuring for ja-ruby18-mecab-0.97 ===> Running extconf.rb to configure checking for main() in -lmecab... no checking for main() in -lstdc++... yes checking for mecab.h... yes creating Makefile と、MeCab のシェアードライブラリは入っているのですが、extconf.rb からは 見えておらず、ビルドは成功するのですが、mecab を使おうとすると、 $ ruby test.rb 0.97 /libexec/ld-elf.so.1: /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd7/MeCab.so: Undefined symbol "_ZN5MeCab12createTaggerEPKc" のように、ダイナミックリンクに失敗します。LD_LIBRARY_PATH=/usr/local/lib を 付けてみましたが変化ありませんでした。 他の拡張モジュールでも起きるのかどうかわかりませんが、確認したところの報告まで。 |
|
|
[ruby-dev:38732] Re: FreeBSD で ruby-mecab のライブラリ参照の不具合須藤です。
In <20090704153002.d969dc66.ksmakoto@...> "[ruby-dev:38731] FreeBSD で ruby-mecab のライブラリ参照の不具合" on Sat, 4 Jul 2009 15:30:04 +0900, "KISHIMOTO, Makoto" <ksmakoto@...> wrote: > FreeBSD7.2 (RELENG_7) で、CVS から取ってきた ports を使っています。 > Ruby のバージョンは > $ ruby --version > ruby 1.8.7 (2009-04-08 patchlevel 160) [amd64-freebsd7] > となっています。 i386ですが、手元では動いているように見えます。 (test.rbの中身がわからないので試しかたが違うと思いますが。) % ruby -v ruby 1.8.7 (2009-04-08 patchlevel 160) [i386-freebsd7] > $ ruby test.rb > 0.97 > /libexec/ld-elf.so.1: /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd7/MeCab.so: Undefined symbol "_ZN5MeCab12createTaggerEPKc" > > のように、ダイナミックリンクに失敗します。LD_LIBRARY_PATH=/usr/local/lib を > 付けてみましたが変化ありませんでした。 この結果はどうなりますか? % strings /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd7/MeCab.so | grep _ZN5MeCab % strings /usr/local/lib/libmecab.so.1 | grep _ZN5MeCab12 % mecab-config --version |
|
|
[ruby-dev:38733] Re: FreeBSD で ruby-mecab のライブラリ参照の不具合test.rb は ruby-mecab の配布物の中の test.rb です
> この結果はどうなりますか? > > % strings /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd7/MeCab.so | grep _ZN5MeCab > % strings /usr/local/lib/libmecab.so.1 | grep _ZN5MeCab12 > % mecab-config --version $ strings /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd7/MeCab.so | grep _ZN5MeCab _ZN5MeCab6Tagger6createEiPPc _ZN5MeCab6Tagger6createEPKc _ZN5MeCab12createTaggerEPKc _ZN5MeCab14getTaggerErrorEv _ZN5MeCab6Tagger7versionEv $ strings /usr/local/lib/libmecab.so.1 | grep _ZN5MeCab12 _ZN5MeCab12progress_barEPKcmm _ZN5MeCab12CharPropertyD0Ev _ZN5MeCab12CharProperty5closeEv _ZN5MeCab12CharPropertyD1Ev _ZN5MeCab12FeatureIndexD0Ev _ZN5MeCab12StringBufferD1Ev _ZN5MeCab12FeatureIndexD1Ev _ZN5MeCab12FeatureIndexD2Ev _ZN5MeCab12FeatureIndex19buildUnigramFeatureEP20mecab_learner_path_tPKc _ZN5MeCab12FeatureIndex8calcCostEP20mecab_learner_node_t _ZN5MeCab12FeatureIndex18buildBigramFeatureEP20mecab_learner_path_tPKcS4_ _ZN5MeCab12FeatureIndex8calcCostEP20mecab_learner_path_t _ZN5MeCab12CharProperty4openERKNS_5ParamE _ZN5MeCab12CharProperty11set_charsetEPKc _ZN5MeCab12CharProperty7compileEPKcS2_S2_ _ZN5MeCab12StringBuffer5writeEPKcm _ZN5MeCab12StringBuffer5writeEc _ZN5MeCab12StringBuffer5writeEPKc _ZN5MeCab12StringBufferD0Ev _ZN5MeCab12StringBufferD2Ev _ZN5MeCab12StringBuffer7reserveEm _ZN5MeCab12scoped_arrayIN5Darts15DoubleArrayImplIchijNS1_6LengthIcEEE16result_pair_typeEED0Ev _ZN5MeCab12scoped_arrayIN5Darts15DoubleArrayImplIchijNS1_6LengthIcEEE16result_pair_typeEED1Ev _ZN5MeCab12scoped_arrayIcED0Ev _ZN5MeCab12scoped_arrayIcED1Ev _ZN5MeCab12CharProperty4openEPKc _ZN5MeCab12createTaggerEPKc _ZN5MeCab12createTaggerEiPPc _ZN5MeCab12FeatureIndex9set_alphaEPKd _ZN5MeCab12FeatureIndex6strdupEPKc _ZN5MeCab12FeatureIndex8getIndexEPPcS2_m _ZN5MeCab12FeatureIndex12openTemplateERKNS_5ParamE $ mecab-config --version 0.97 |
|
|
[ruby-dev:38736] Re: FreeBSD で ruby-mecab のライブラリ参照の不具合せいけです。
# 環境も違いますし、とりあえず情報だけの提供です。 FreeBSD i386で今日MeCab関係はインスールしたのですが、 動いているようです。amd64の問題でしょうか? インストールしたportsは以下です。 ja-mecab-0.97 ja-mecab-ipadic-2.7.0.20070801 ja-ruby18-mecab-0.97 # uname -a FreeBSD rx.seike.org 7.2-STABLE FreeBSD 7.2-STABLE #0: Sun Jul 5 02:58:46 JST 2009<省略> # ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-freebsd7] # nm /usr/local/lib/libmecab.so.1|grep _ZN5MeCab12create 0004f020 T _ZN5MeCab12createTaggerEPKc 0004f390 T _ZN5MeCab12createTaggerEiPPc # nm /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd7/MeCab.so |grep _ZN5MeCab12create U _ZN5MeCab12createTaggerEPKc # ldd /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd7/MeCab.so /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd7/MeCab.so: libruby18.so.18 => /usr/local/lib/libruby18.so.18 (0x28300000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x283db000) libmecab.so.1 => /usr/local/lib/libmecab.so.1 (0x284d0000) libcrypt.so.4 => /lib/libcrypt.so.4 (0x28199000) libm.so.5 => /lib/libm.so.5 (0x281b2000) libc.so.7 => /lib/libc.so.7 (0x28089000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x281c7000) libthr.so.3 => /lib/libthr.so.3 (0x281d2000) libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x28613000) # ldd /usr/local/lib/libmecab.so.1 /usr/local/lib/libmecab.so.1: libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x28443000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x28538000) libm.so.5 => /lib/libm.so.5 (0x2818c000) libc.so.7 => /lib/libc.so.7 (0x28089000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x281a1000) # ruby /usr/local/share/examples/ruby18/mecab/test.rb 0.97 ... filename: /usr/local/lib/mecab/dic/ipadic/sys.dic charset: euc-jp size: 392126 type: 0 lsize: 1316 rsize: 1316 version: 102 At Sat, 4 Jul 2009 20:26:51 +0900, KISHIMOTO, Makoto wrote: > > test.rb は ruby-mecab の配布物の中の test.rb です > > > この結果はどうなりますか? > > > > % strings /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd7/MeCab.so | grep _ZN5MeCab > > % strings /usr/local/lib/libmecab.so.1 | grep _ZN5MeCab12 > > % mecab-config --version |
|
|
[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 という行を追加してみたところ、うまく動くようになりました。 なぜ私の環境でだけ起きているのか謎ですが... |
|
|
[ruby-dev:38739] Re: FreeBSD で ruby-mecab のライブラリ参照の不具合きしもとです
ports の6月19日の変更以降でダメになっていることがわかりました。 追いかけてみた結果、 6月19日の ports/lang/ruby18/Makefile の変更↓で http://www.freebsd.org/cgi/cvsweb.cgi/ports/lang/ruby18/Makefile.diff?r1=1.142;r2=1.143;f=h LDFLAGS+= ${PTHREAD_LIBS} が削られていること(最新版にこの行を追加すれば動く)と http://www.freebsd.org/cgi/cvsweb.cgi/ports/lang/ruby18/files/patch-configure.in?annotate=1.1 このパッチにより、Makefile 中で -lpthread が LIBS ではなく MAINLIBS に 設定されるようになっていること(そうならないようにパッチを修正すると動く) 以上(のどちらか・両方)が原因であると確認しました。 ruby の問題というよりは、ports の問題ですので、ruby-dev への報告は、 特に何かなければこれで最後にしたいと思います。 |
| Free embeddable forum powered by Nabble | Forum Help |