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が使い方が謎です。
Follow-Ups:
- [fol] Re: EGCS,GCC2.8 and register_frame_info ProblemHirofumi SHINKE
- Prev by Date: [fol] Re: ご意見御礼(Linuxビジネス関連のヒント)
- Next by Date: [fol] Re: [Q]内臓モデムが応答しません???
- Previous by thread: [fol] Re: EGCS,GCC2.8 and register_frame_info Problem
- Next by thread: [fol] Re: EGCS,GCC2.8 and register_frame_info Problem
- Indexes:[Main][Thread]