Takashi ASARI
asari****@gmail*****
2008年 1月 4日 (金) 08:06:20 JST
こんにちは。浅利といいます。初めての投稿となります。よろしくお願いいたします。 Ludia と Senna とで、 MeCab のリンク先が異なる状態に なっていることに気づいたので、ご報告しておきます。 私の環境では MeCab が複数インストールされています。 ( まったくの余談ですが、私にとっては PostgreSQL も MySQL も Hyper Estraier も Apache も、なんでも複数インストールされがちです。) $ ~/local/mecab/bin/mecab --version mecab of 0.96 $ /usr/bin/mecab --version mecab of 0.95 一方、前者の MeCab を利用して作られた Senna の senna-cfg は以下のようになります。 $ ~/local/senna/bin/senna-cfg --libs -L/home/asari/local/senna/lib -lmecab この状態で Ludia をコンパイルすると、 Ludia では意図しない MeCab が使われてしまうことになります。 $ ldd ~/local/pg825/lib/postgresql/pgsenna2.so libmecab.so.1 => /usr/lib/libmecab.so.1 (0x00c96000) libsenna.so.0 => /home/asari/local/senna/lib/libsenna.so.0 (0x00b76000) libc.so.6 => /lib/tls/libc.so.6 (0x00512000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x008c2000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00111000) libm.so.6 => /lib/tls/libm.so.6 (0x00b3a000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x001dc000) /lib/ld-linux.so.2 (0x00272000) $ ldd ~/local/senna/lib/libsenna.so libmecab.so.1 => /home/asari/local/mecab/lib/libmecab.so.1 (0x003d1000) libc.so.6 => /lib/tls/libc.so.6 (0x0096e000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00111000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00123000) libm.so.6 => /lib/tls/libm.so.6 (0x001ee000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0059f000) /lib/ld-linux.so.2 (0x00272000) 対策としては、 以下が考えられると思います。 1. senna-cfg が MeCab のリンク情報も出力するようにする 2. senna-cfg は -lmecab さえも出力しない (と、どうなるんだろう?) 3. Ludia の configure オプションとして --with-mecab-config を受け付けるようにする 私としましては、なんとなく 1. がいいのではないかと思っています。 いい例が思いつかなかったのですが、私に馴染み深い Fink という特殊な状況下で 変な場所にインストールされる二つのライブラリの例を挙げさせてください。 $ PKG_CONFIG_PATH=/sw/lib/pango-ft219/lib/pkgconfig:/sw/lib/freetype219/lib/pkgconfig $ export PKG_CONFIG_PATH $ pkg-config freetype2 --libs -L/sw/lib/freetype219/lib -lfreetype -lz $ pkg-config pangoxft --libs -L/sw/lib/pango-ft219/lib -L/sw/lib/fontconfig2/lib -L/sw/lib/freetype219/lib -L/usr/X11R6/lib -L/sw/lib -lpangoxft-1.0 -lXft -lXrender -lpangoft2-1.0 -lfontconfig -lfreetype -lz -lpango-1.0 -lm -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv freetype2 に依存している pangoxft の出力は、 freetype2 の出力を包含しています。 試しに senna-cfg を編集して MeCab のリンク情報を出力するようにしてみたところ、 意図した MeCab を使うことができています。 $ ldd ~/local/pg825/lib/postgresql/pgsenna2.so libmecab.so.1 => /home/asari/local/mecab/lib/libmecab.so.1 (0x00a39000) libsenna.so.0 => /home/asari/local/senna/lib/libsenna.so.0 (0x00ecc000) libc.so.6 => /lib/tls/libc.so.6 (0x0063c000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00805000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00111000) libm.so.6 => /lib/tls/libm.so.6 (0x001dc000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0034b000) /lib/ld-linux.so.2 (0x00272000) 実のところ、ここまで書いておいてなんですが、 (使おうとしてはいますが) 今までに実際に Ludia を使っているわけではありません。 ldd の出力が変わったからと言ってどのように動作が変わるかは検証していません。 どうということはないのかもしれません。 当方コンパイルが趣味のようなものなので、つい投稿してしまいました。 失礼いたします。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/