2003年9月26日(金)

TWO-LEVEL AND FLAT NAMESPACES

某 MacOSX 上で某 scilab を某 XL Fortran でコンパイルしてハマる。
コンパイルは通せたのだが、いざ実行してみるとコケる。まこすは dynamic link library の名前空間にライブラリファイル名も入るので、同名の関数が共有ライブラリ空間内に複数存在できる。で、俺みたいに野良 build の XFree86 と Apple X11 を両方インストールしておくと、両方のライブラリ中の関数が対象になる。

というのが俺の理解なんだが正しいのかね?(ばき

で、、それでも普段は特に問題は生じないのだが、今回はどういう訳か /usr/X11R6/lib と /usr/XFree86/lib でコンフリクトしてくれた。

曰く、

dyld: /usr/local/lib/scilab-2.7/bin/scilex multiple definitions of symbol _XtSetTypeConverter
/usr/XFree86/lib/libXt.6.dylib(Convert.o) definition of _XtSetTypeConverter
/usr/X11R6/lib/libXt.6.0.dylib(Convert.o) definition of _XtSetTypeConverter
/usr/local/bin/scilab: line 6:  1050 Trace/BPT trap          $SCI/bin/scilex $*

今まで問題が生じてなかったんだし、だいたい誰がこの関数読んでるのかも不明だし散々悩んだが、結局 ktrace かけて、以前別のコンパイラでコンパイルしたちゃんと動作する scilex の ktrace を突き合わせてなんとなく理解。 fink の Xaw3d から XFree86/lib を読みにいって、その後は X11R6/lib を随時読んでいる。コンパイルログを見ると -L/usr/XFree86/lib -lXaw3d -lXt とかなんとかなっていて XFree86/lib を読む余地があるのが悪いのか、えい面倒と configure で XFree86 ではなく X11R6 を引っ掛けるようにしたらなんとなく解決。 結局、どのライブラリの関数が優先されるのかってナニで決まるんだゴルァ

[referer: [an error occurred while processing this directive]]

あわせて読みたい