libgcc_s.so: undefined reference to `__stack_chk_fail@GLIBC_2.4'
Au premier abord, je préviens que je ne suis pas programmeur, mais seulement l'administrateur, j'essaie de comprendre certaines actions
Quand j'ai installé le programme fait par Oracle, j'ai reçu un message du journal:
/usr/bin/make -f ins_precomp.mk relink ORACLE_HOME=/u01/oracle/OraHome_1 EXENAME=proc/Linking /u01/oracle/OraHome_1/precomp/lib/proc
__stack_chk_fail@GLIBC_2.4"
libgcc_s.so: undefined reference to
ls -l
../libgcc_s.so -> /lib/libgcc_s.so.1
donc ensuite, j'ai essayé de diagnostiquer par:
objdump -T /lib/libgcc_s..1 | grep __stack_chk_échouer
00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail
et
ldd /lib/libgcc_s..1.ORG
linux-gate.so.1 => (0x00fc5000)
libc.so.6 => /lib/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00b39000)
et
objdump -T /lib/libc..6 |grep __stack_chk_échouer
00c52f80 g DF .text 0000001a GLIBC_2.4 __stack_chk_fail
1) je ne sais pas pourquoi ce problème s'est produit si tous les symboles sont à l'intérieur des bibliothèques partagées (mabye ce n'est pas le cas, veuillez me corriger, ou comment le vérifier)
quand j'ai mis plus anciens de la bibliothèque libgcc_s..1 sans symbole __stack_chk_échouer
objdump -T /lib/libgcc_s..1 |grep __stack_chk_échouer
empty output
tout était ok
2) Ne pas vérifier l'éditeur de liens de référence à __stack_chk_échouer, car il n'existe pas à l'intérieur de libgcc_s..1 dans ce cas?
OriginalL'auteur martin | 2011-02-23
Vous devez vous connecter pour publier un commentaire.
Le problème est:
libgcc_s.donc, est d'avoir la dépendance à l'égard de la libc..6. Ce problème commence avec la glibc version 2.4.
Vous devez ajouter -lc dans la ligne de liaison.
À cette question vous donnera plus d'informations.
Sous Linux, les talons sont utilisés pour les bibliothèques standard. Pourquoi sont les bouchons nécessaire?
alors, où devrais-je ajouter -lc au début ou à la fin?
Ajouter lc après lgcc_s dans la ligne de liaison.
Je suis de peur que, en raison de la raison que les scripts d'installation d'Oracle sont très complexes, je ne sais pas à qui je doit mettre lc. J'ai essayé de définir LD_PRELOAD mais il n'est pas possible pour des raisons de sécurité, ensuite, je définis LD_LIBRARY_PATH /lib mais cela ne fonctionne pas. Donc je ne comprends pas si l'éditeur de liens peut trouver libgcc_so.1 /lib chemin pourquoi il ne peut pas trouver la glibc dans le même répertoire?
OriginalL'auteur sunmoon
La
*UND*
dans00000000 DF *UND* 00000000 GLIBC_2.4 __stack_chk_fail
indique que l'article référencé ne sont pas définis. Donc, oui, vous êtes absent le symbole.bien sûr, symbole __stack_chk_l'échec n'est pas défini dans libgcc_so.1 mais il est défini à l'intérieur de la libc..6, de sorte que je ne comprends pas pourquoi l'avertissement se produire
OriginalL'auteur Conrad Meyer