typerの日記: Undefined symbol "pthread_getschedparam"問題
freebsd-users-jp@ML購読してるとさすがにspamが多い。そんなわけで「bsfilter with nephele in sylpheed」って感じにしようと思った。nepheleってのは、fetchmail+procmail+progress@gtkってソフト。詳しくはリンクをたどってね。
ところが思わぬ障害発生。
~% nephele.rb
/libexec/ld-elf.so.1: /usr/local/lib/libgthread-2.0.so.400: Undefined symbol "pthread_getschedparam"
ってな感じだ。nepheleはダイアログを表示するためにruby/GTK2を使ってる。この辺りで発生するものらしい。ぐぐって見たところ、
- その昔、pkg-config --libs gthread-2.0に「-lc_r」が含まれていないバグがあり、ruby/GTK2がlibc_rをリンクしなかったため。しかし修正済み。つか、5.*だと「-pthread」
- rubyがスレッド対応でないため?RUBY_WITH_PTHREAD=yesをつけてmake。ただし、RUBY_WITH_PTHREAD=yesは4.*が対象、5.*では無効。
……
が、configureに「--enable-pthread」と言うのを見つける。そこで、make.confに「RUBY_CONFIGURE_ARGS=--enable-pthread」をつけるが、makeに失敗。
#を、エラーログ残してない。たしか、「ext/ext??.rb:20?でどうのこうの」だった気が^_^;
そこで、RUBY_WITH_PTHREADを処理してるports/Mk/bsd.ruby.mkの4.*/5.*判定部分をコメントアウトしてmake。今度は通った。ログ見るとちゃんと-lc_r付けてる(笑)。後はportupgradeとかのrubyが動くかどうか……。
# portupgrade
portupgrade: コマンドが見つかりません.
へ?インストール失敗?ログろぐ……インストールは問題なく終ってるが?まてよ、
===> Registering installation for ruby_r-1.8.2_1
なぜに"_r"?とおもい"ls .."するとそこには「ruby_r」の姿が。
orz
x11-toolkit/ruby-gtk2(ruby/GTK2)はruby_rにdependして欲しかったなぁ。
気を取り直して一旦ruby_rを消してからrubyを復活させ、再度ruby_rを入れる。そしてnephele.rbを編集。
/usr/local/lib/ruby/site_ruby/1.8/glib2.rb:64:in `require': No such file to load -- glib2.so (LoadError)
なんて出るがこれはruby_rは*.soを入れる場所が違うから。
# cd /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd5_r/
# ln -s ../i386-freebsd5/glib2.so
# ln -s ../i386-freebsd5/atk.so
# ln -s ../i386-freebsd5/pango.so
# ln -s ../i386-freebsd5/gtk2.so
# ln -s ../i386-freebsd5/gdk_pixbuf2.so
すれば良い。が、しかし
~% nephele.rb
~/bin/nephele.rb:109: uninitialized constant Gtk::WINDOW_POPUP (NameError)
……
最初に
~/bin/nephele.rb:104:in `require': No such file to load -- gtk (LoadError)
って出た時点でおかしいとは思ったが、0.0.1と0.1.0をdiffするとドキュメントがgtk->gtk2なってるだけじゃん orz
そんなわけでruby-gtk2はおろかruby_rもいらんかった。正解はruby-gtk入れて、後は、
~/bin/nephele.rb:50:in `rename': Cross-device link - /tmp/mail50133.0 or ~/Mail/inbox/12 (Errno::EXDEV)
ってでるので
nephele.rbの46行目を
- tmpfile = Tempfile.open('mail')
+ tmpfile = Tempfile.open('mail',ENV['HOME']+'/tmp/nephele')
して終り。かなり遠回りしちゃいました。さ、ruby_r他消しちゃお。
[05/01/16 追記]
その後、sylpheedにて「メールの受信に外部プログラムを使用する」にチェックを付けて、受信ボタンを押すと正常に受信振り分けする事を確認したが、「新着メールを自動チェックする」をチェックして自動受信させても外部プログラムを使ってくれない現象が発生し、困っていたのだが、実はsylpheedの振り分けで「コマンドの実行結果」と言う条件が使える事を発見。bsfilterもそのまま使えた。と言うわけで結論:
sylpheedでbsfilterは普通に使える。このエントリでやった事は全くの無駄。orz
最後にbsfilterについて参考にしたところをメモして終る。
http://ponx.s5.xrea.com/bibo/20030920.html
http://rtfm.jp/tota/diary/20041106.html
Undefined symbol "pthread_getschedparam"問題 More ログイン