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
最近のコメント