libgcc_s.so:未定义引用`__stack_chk_fail@GLIBC_2.4'

时间:2011-02-23 12:24:15

标签: c++ c oracle linker linker-errors

起初我警告说我不是程序员,而是管理员我只是尝试理解一些行为

当我安装Oracle制作的程序时,我收到了日志消息:

/usr/bin/make -f ins_precomp.mk relink ORACLE_HOME=/u01/oracle/OraHome_1 EXENAME=proc/Linking /u01/oracle/OraHome_1/precomp/lib/proc
libgcc_s.so: undefined reference to
__ stack_chk_fail @ GLIBC_2.4'`

ls -l
../libgcc_s.so -> /lib/libgcc_s.so.1

所以接下来我试着通过以下方式进行诊断:

objdump -T /lib/libgcc_s.so.1 | grep __stack_chk_fail
00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail

ldd /lib/libgcc_s.so.1.ORG
linux-gate.so.1 => (0x00fc5000)
libc.so.6 => /lib/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00b39000)

objdump -T /lib/libc.so.6 | grep __stack_chk_fail
00c52f80 g DF .text 0000001a GLIBC_2.4 __stack_chk_fail

1)如果所有符号都在共享库中,我不知道为什么会出现这个问题(mabye不是,请纠正我,或者如何检查)

当我把旧库libgcc_s.so.1没有符号__stack_chk_fail

objdump -T /lib/libgcc_s.so.1 | grep __stack_chk_fail
empty output

一切正常

2)链接器是否检查对__stack_chk_fail的引用,因为在这种情况下libgcc_s.so.1内部没有?

2 个答案:

答案 0 :(得分:4)

问题是:

libgcc_s.so依赖于libc.so.6。这个问题始于glibc 2.4版本。

您应该在链接行添加-lc。

这个问题会为您提供更多信息。 In Linux stubs are used for standard libraries. Why are stubs required?

答案 1 :(得分:2)

*UND*中的00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail表示该部分已被引用但未定义。所以,是的,你错过了这个符号。