[ubuntu-jp] stack_chk_fail_local

Zhidao zhidao at land.linkclub.or.jp
Tue Jan 2 16:16:15 GMT 2007


Zhidaoと申します。
Edgy Eft使用中 on Let's note CF-W4です。

昨年末にパッケージの自動更新を行ったら、GCCでのコンパイルが通らなく
なりました。正確に書くと、自分で作ったライブラリlibhoge.soとリンク
しようとすると、次のように怒られます。
--
% gcc -Wall -ansi -O3 -fno-stack-protector -L. -I. -o hoge hoge.c -lhoge
/usr/bin/ld: hoge: hidden symbol `__stack_chk_fail_local' in /usr/lib/libc_nonshared.a(stack_chk_fail_local.oS) is referenced by DSO
/usr/bin/ld: final link failed: 出力に対応するセクションがありません
collect2: ld returned 1 exit status
make: *** [hoge] エラー 1
--
-fno-stack-protectorは、最初はつけていなかったのですが、このような
エラーが出るようになったので試しに付けてみたものです。結果は上記の
通り、変わりませんでした。-ansiは趣味ですが、これがこの問題に影響を
持たないことも確認しています。-O3についてもそうです。

エラーの意味としては、libc.soの中に__stack_chk_fail_localなるシン
ボルが見付からないので、ldがlibc_nonshared.aと無理矢理実行時リンク
しようとしてしまっている、ということかと思っています。

libmとか標準的なライブラリとリンクする分には、このエラーは出ません。
libhogeは、それまでは問題なく使えていたので、ソースに問題があるとも
思っていません。

恐らく更新されたパッケージはlibc6で(自動更新に任せていたので、どれが
元凶だか把握できてないのですorz)、バージョン2.4-1ubuntu12。libc6-dev、
libc6-i686も入れてます。なお、
--
% gcc --version
gcc (GCC) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)
--
です。これをgcc-3.3にしてみたりもしましたが、結果は変わらず、です。

ちなみに、次のようなこともやってみました。あまり参考になるとも思いま
せんが…。
--
% nm /usr/lib/libc.a | grep stack_chk_fail
stack_chk_fail.o:
00000000 T __stack_chk_fail
stack_chk_fail_local.o:
         U __stack_chk_fail
00000000 T __stack_chk_fail_local
% nm /usr/lib/libc_nonshared.a | grep stack_chk_fail
stack_chk_fail_local.oS:
         U __stack_chk_fail
00000000 T __stack_chk_fail_local
--

どなたかこの問題について、情報をお持ちでないでしょうか?
--
Zhidao




More information about the ubuntu-jp mailing list