2011-02-23 8 views
4

에 정의되지 않은 참조 나는, 나는/프로그래머하고 있지 않다 있다고 경고하지만 오라클에 의해 만들어진 프로그램을 설치하면 관리자는 좀 행동libgcc_s.so :`[email protected]_2.4 '처음에는

을 이해하려고 노력 메시지를 기록되었다 :

/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 | 그렙
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에 __stack_chk_fail /libc.so.6 | grep __ 이 문제가 발생하는 이유 모든 기호 내부 라이브러리를 공유하는 경우 나도 몰라)
00c52f80 g DF .text 0000001a GLIBC_2.4 __stack_chk_fail

1 stack_chk_fail (mabye는,

때를) 저를 수정하거나 확인하는 방법하시기 바랍니다 아니다

objdump를 -T의 /lib/libgcc_s.so.1 __stack_chk_fail 기호없이 오래된 라이브러리 libgcc_s.so.1를 넣어 | 그렙
empty output

,536,913 __stack_chk_fail 63,210

모든 경우에 내부 libgcc_s.so.1이 없기 때문에

2) 링커, __stack_chk_fail 참조를 확인하지 마십시오 확인했다?

답변

2

00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail*UND*은 섹션이 참조되지만 정의되지 않았 음을 나타냅니다. 그래, 네가 상징을 잃어 버렸어.

+0

은 그렇게 실패에 실행할 때 때문에 정의해야하는 위치를 설명 할 수있다 : objdump를 -T /lib/libgcc_s.so.1 | 그렙 UND, 내가 좋아하는, 훨씬 더 얻을 : 00000000 DF * 싶게 * 00000000 GLIBC_2합니다. 0 realloc – martin

+0

물론 __stack_chk_fail 기호는 libgcc_so.1에서는 정의되지 않았지만 libc.so.6에서 정의되었으므로 경고가 발생하는 이유를 알 수 없습니다 – martin

4

문제이다

libgcc_s.so는 libc.so.6으로의 의존성을 가지고있다. 이 문제는 glibc 2.4 버전부터 시작됩니다.

링크 줄에 -lc를 추가해야합니다.

이 질문은 당신에게 더 많은 정보를 제공 할 것입니다. In Linux stubs are used for standard libraries. Why are stubs required?

+0

내 것보다 훨씬 좋은 대답입니다!+1 –

+0

그래서 시작 부분이나 끝 부분에 -lc를 추가해야합니까? – martin

+0

링크 행에서 lgcc_s 뒤에 lc를 추가하십시오. – sunmoon

관련 문제