[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:11931] Re: [Q]segmentation fault
佐野@浜松です。
In article <8706ED2299E8D011B4A80000E20C257894EC@MSENT000>
古田 拓 <furuta-taku@xxxxxxxxxxxxxxxxxx> さん writes:
> 特にNetscape で、もう一度ftpで持ってきて、インストールするのが
> めんどくさかったからです。その方法はやってみようと思います。
特に slink 版の Netscape は従来の「インストーラパッケージ」ではなく、
実体を含んだパッケージになっているので、それがまず嬉しいのと、
あと bo (libc5) 版ではたしか libc ライブラリのバージョンの関係で
kinput2 や skkinput での直接日本語入力ができないらしかったのに
対して、 hamm 以降の glibc2 版では直接入力できるらしいと聞いている
のでそれが嬉しいんじゃないかな (でも私はまだちゃんと設定できて
いませんが ;_;) と思います。 bo でも自分で libc5 のバージョンを
変更していればできたのかもしれませんが、そこまでする気になれません
でしたし。
# ちょうど bo でパッケージ化されていた 5.4.33 が、江後田さんの Web
# ページによればたしか一番相性の悪いバージョンだったような。
# パッケージの kinput2 のバージョンも問題あったみたいでした。
# まあ Netscape がすべてじゃないさ、と bo ではあきらめていたので
# あまり突込んで調べたり、自分でいろいろインストールしたりは
# しなかったのもあるかもしれませんが。しかし、 hamm ならできるはず
# なのに現状できていないのはちょっと悔しいかも。
> あと、ライブラリ関連に何か不具合がありそうな気がして、それでMLに
> 記事を流しました。何か妙な点がありましたら、指摘してください。
前回の
> > そこでldd で調べると
>
> > ldd /usr/X11R6/bin/tgif
> > libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x4000a000)
> > libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40016000)
> > libm.so.5 => /lib/libm.so.5 (0x400ba000)
> > libc.so.5 => /lib/libc.so.5 (0x400c3000)
> > libc.so.6 => /lib/libc.so.6 (0x40181000)
> > ld-linux.so.2 => /lib/ld-linux.so.2 (0x40226000)
> >
> libc6 と ld-linux.so.2 が呼ばれているのはおかしい、とこちらの ML で
> 指摘されました。いろいろ調べてみましたが、何がどう悪いのかさっぱりわかりません。
> 例えば、基本的なところなのでしょうが、プログラムが起動するとき、どういう仕組み
> で共有ライブラリを読んで動くのでしょうか。
これですよね。私はサッサと入れ換えてしまったので、あまり深く調べませんでしたが
自分で入れていた /usr/local/bin 以下で似たようなものを見つけたので参考までに
書いておきます。
% ldd /usr/local/bin/xanim.24bpp
libwcsmbs.so.0 => /lib/libc5-compat/libwcsmbs.so.0 (0x4000d000)
libc.so.5 => /lib/libc.so.5 (0x4000f000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x400cd000)
libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x400d9000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40121000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x4012a000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4013f000)
libm.so.5 => /lib/libm.so.5 (0x401e2000)
libc.so.6 => /lib/libc.so.6 (0x401eb000)
ld-linux.so.2 => /lib/ld-linux.so.2 (0x40290000)
% strings /usr/local/bin/xanim.24bpp |grep lib
/lib/ld-linux.so.1
libc.so.5
__libc_init
libXext.so.6
libXt.so.6
libSM.so.6
libICE.so.6
libX11.so.6
libm.so.5
/usr/X11R6/lib (<- コレに注目!)
% /usr/local/bin/xanim.24bpp
Segmentation fault
% ldd /usr/local/bin/xvgen
libwcsmbs.so.0 => /lib/libc5-compat/libwcsmbs.so.0 (0x4000d000)
libolgx.so.3 => /usr/lib/libc5-compat/libolgx.so.3 (0x4000f000)
libxview.so.3 => /usr/lib/libc5-compat/libxview.so.3 (0x4001b000)
libX11.so.6 => /usr/lib/libc5-compat/libX11.so.6 (0x4012e000)
libm.so.5 => /lib/libm.so.5 (0x401cc000)
libc.so.5 => /lib/libc.so.5 (0x401d5000)
libXext.so.6 => /usr/lib/libc5-compat/libXext.so.6 (0x40293000)
% strings /usr/local/bin/xvgen|grep lib
/lib/ld-linux.so.1
libolgx.so.3
libxview.so.3
libX11.so.6
libm.so.5
libc.so.5
__libc_init
% /usr/local/bin/xvgen
(正常起動)
% ldd /usr/local/bin/xlander
libwcsmbs.so.0 => /lib/libc5-compat/libwcsmbs.so.0 (0x4000d000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x4000f000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4001b000)
libm.so.5 => /lib/libm.so.5 (0x400be000)
libc.so.5 => /lib/libc.so.5 (0x400c7000)
libc.so.6 => /lib/libc.so.6 (0x40185000)
ld-linux.so.2 => /lib/ld-linux.so.2 (0x4022a000)
% strings /usr/local/bin/xlander |grep lib
/lib/ld-linux.so.1
libXext.so.6
libX11.so.6
libm.so.5
libc.so.5
__libc_init
/usr/X11R6/lib (<- コレに注目!)
% /usr/local/bin/xlander
Segmentation fault
どうやら、実行バイナリの中に /usr/X11R6/lib が指定されているものがあって、
それらは実行時に X 関係のライブラリをロードする際、本来は libc5 用として
/usr/lib/libc5-compat からロードされるはずが、コンパイル時に指定された
/usr/X11R6/lib からロードしてしまうために、それらの glibc2 版のライブラリ
が必要とする libc.so.6 や ld-linux.so.2 などもロードされてしまって、
共有ライブラリ関係の解決ができなくなって Segmentation fault で落ちる、と
いうことなんじゃないかと想像してます。
ちなみに man ld すると
-rpath directory
ディ レ ク トリを実行時ライブラリの検索パスに追加す
る。これは ELF の実行ファイルを共有オブジェクトとリ
ン クするときに用いられる。 -rpath の引き数は全て結
合され、ダイナミックリンカに渡される。ダイナミッ ク
リ ンカは、これを用いてロードする共有オブジェクトを
実行時に決定する。 -rpath オプションはリンクに明 示
的 に含まれている共有オブジェクトによって必要とされ
る別の共有オブジェクトを指定するのに用いることも で
き る。 -rpath-link オプションの説明を見よ。 ELF 実
行ファイルの -rpath が指定されない場合には、 (指 定
さ れ ていれば) 環境変数 LD_RUN_PATH の値が用いられ
る。
-rpath オプションは SunOS で用いることも で き る。
SunOS のデフォルトでは、リンカは実行時の検索パスを
-L オプションで与えられたパスから生成する。 -rpath
が 用いられると、実行時の検索パスは -rpath オプショ
ンで与えられたパスのみから生成され、 -L オプショ ン
は無視される。これは gcc を使っていて、 -L がたくさ
ん指定されてしまう (これらは NFS マウントされたファ
イルシステムかもしれない) 場合などに便利である。
という文章が気になったりします。
たぶん、他のバイナリがちゃんと動くのなら、ライブラリの問題というより
その (特定の) プログラムの問題なのでしょう。
あるいは /usr/X11R6/lib 以下に該当するライブラリが存在していない場合
には、ちゃんと /usr/libc5-compat/ 以下からロードできるのかもしれません。
途中まで動いていたのなら、そういうことかも。 (単なる当て推量ですけど)
でも、いつまでもその状態のままというわけにもいきませんよね。
どうしても気になるなら libc5 な altdev 系のパッケージを入れて、
libc5 なパッケージを make し直してみると何かわかるかもしれません。
が、私は既に「気にせず問題が起きたら glibc2 に移行」という方針を
決めてしまったので、 xanim.24bpp もこれから glibc2 で make し直す
ことにします。
--
#わたしのおうちは浜松市、「夜のお菓子」で有名さ。
<xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)