pthread を使うプログラムを作り直す2007年01月28日 11時47分02秒

そんなわけで、作り直した。

普段、頻繁に使うものが動けばそれで、充分だ。まず、sylpheed と seamonkey。Ruby on Rails で色々と試しているので、mysql-server と ruby ぐらいのようだ。xfce4 も pthread にリンクされているが、動かなくても大して困らない。時間に余裕があるときにでも、やるかもしれない。

sylpheed2 と mysql50-server には、特に pthread を使っているライブラリは使っていなかったので、単体だけ作り直したら、問題なく動いた。

seamonkey は pthread を利用するライブラリを取り込むので、これらのライブラリを先に作り直さないと、ビルドに失敗する。

以下の出力は devel/gconf2 を作り直している時に遭遇したエラーだ。devel/ORBit2 が pthread をリンクしているのだが、7.0-CURRENT で作り直されていないために、エラーが出た。


/bin/sh /ports/tmp/usr/ports/devel/gconf2/work/gnome-libtool --mode=link cc  -O2
 -fno-strict-aliasing -pipe  -Wall  -L/usr/local/lib -o gconftool-2  gconftool.o
  -lintl  -Wl,--export-dynamic -pthread -L/usr/local/lib -lgobject-2.0 -lORBit-2
 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lxml2 -lz -liconv -lm   libgconf-2.la
 cc -O2 -fno-strict-aliasing -pipe -Wall -o .libs/gconftool-2 gconftool.o -Wl,--
export-dynamic -pthread  -L/usr/local/lib /usr/local/lib/libxml2.so -lz ./.libs/
libgconf-2.so /usr/local/lib/libORBit-2.so /usr/local/lib/libgobject-2.0.so -lm
/usr/local/lib/libgmodule-2.0.so /usr/local/lib/libgthread-2.0.so -pthread /usr/
local/lib/libglib-2.0.so -licui18n /usr/local/lib/libintl.so /usr/local/lib/libi
conv.so -Wl,--rpath -Wl,/usr/local/lib
 /usr/local/lib/libORBit-2.so: undefined reference to `_(long double,...)(short)
'
 gmake[3]: *** [gconftool-2] Error 1

同じように、これを seamonkey から繰り返して、www/seamonkey、devel/nspr、devel/gconf2、devel/ORBit2 を作り直した後に、seamonkey が 7.0-CURRENT で動いた。

他にも ldd や grep を使って、pthread を使っているバイナリを探す方法もある。


% ldd ruby
ruby:
        libruby18.so.18 => /usr/local/lib/libruby18.so.18 (0x88074000)
        libcrypt.so.3 => /lib/libcrypt.so.3 (0x8812f000)
        libm.so.4 => /lib/libm.so.4 (0x88147000)
        libpthread.so.2 => /usr/lib/libpthread.so.2 (0x8815d000)
        libc.so.6 => /lib/libc.so.6 (0x88182000)
% grep pthread ruby
Binary file ruby matches

前回次回