[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[fol] Re: EGCS,GCC2.8 and register_frame_info Problem


Kawaseです。
glibc-2は使っていないので参考になるかわからないけれど、以前同様の
症状に見舞われたことがあるのでfollowさせて頂きます。

Hirofumi Shinke <shinke _at_ newhouse.rim.or.jp> writes:

> 自分の環境でコンパイルしたプログラム、及びライブラリは動作しています
> が、バイナリ配付のものが動かなくなってしまいました。
> 典型的には、register_frame_infoシンボルが無いといって、プログラムが
> 起動できません。

egcsではないのですがgcc-2.8.1を自前でmakeすると、
crtbegin[S]/crtend[S].o
というfileが
/usr/lib/gcc-lib/[architecture]/[version]/にinstall
されます。
libc-5.4.44まではconfigureでuse old gccをfalseに設定すると、
link時にgcc-2.8.1の提供するcrtbegin(end)[S].oをlinkするように
なっていました。

ここで問題になるのがcrtbegin[S].oにsymbol
register_frame_info が参照されていて、これをlinkすると
できあがる program, libraryにこのsymbolが含まれるのです。
shared libraryの場合、libgcc.aをlinkしないので未定義の
register_frame_info が残ってしまい、

can't resolve symbol '__register_frame_info'

となってprogramは動きません。
結局libc-5.4.46ではgccのversionにかかわらず、libc側で用意する
crtbegin(end)[S].oを使ってlibraryを作成するようになったので
libcには register_frame_infoは参照されなくなり、このような
errorは発生しなくなりました。
(ではいったいgcc-2.8の用意するcrtbegin[S].oは何に使うのだろう?)

libc.soに未定義のsymbolが含まれることがいけなかった
と私は理解しております。

> ・gcc2.7では、libcの中の(de)register_frame_infoシンボルをリンクしていた
>   ものを、egcs(gcc2.8)では、libgcc.aで提供するシンボルを静的にリンク
>   する方式に変わった為、

register_frame_infoはgcc-2.8になって現れたものなので、2.7では
関係ないような気がします。それともglibc-2が用意してくれるの
でしょうか?

> ・egcs(gcc2.8)で、コンパイルしたlibcには、(de)register_frame_infoシンボル
>   が存在せず、

これが正常なのだと思います。

> ・gcc2.7でコンパイルしたプログラムは、(de)register_frame_infoシンボル
>   の解決ができない。

programが解決できないのではなく、それにlinkされている
shared libraryが参照しているregister_frame_infoが
解決できないのではないでしょうか?

> 2.この問題を、どうやって回避したら良いのでしょうか?
>  libcを入れ換たらと言われそうですが、どんな方法でコンパイルすれば
>  この問題を回避できるのかわかりません。

動かないprogramとはlibc-5用のprogramではないですか?
記事からでは判断しかねます。

あと個人的な興味なんですがglibc-2ではcrtbegin(end)[S].oは
gccのものを使うのでしょうか? それともglibc-2が用意する
のでしょうか?
いまだにgcc-2.8の提供するcrtbegin(end)[S].oが使い方が謎です。

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: