J'ai essayé de suivre le didacticiel en ligne de Learn C The Hard Way .
Cependant, après avoir configuré valgrind (j'ai suivi d'autres liens qui aident à configurer valgrind sur ubuntu 12.04), lorsque j'essaie de déboguer l'exécutable c, je trouve les erreurs suivantes.
ayusman@ayusman-ubuntu:~/lcthw$ valgrind ./ex4
==1984== Memcheck, a memory error detector
==1984== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1984== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1984== Command: ./ex4
==1984==
valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details of the redirection are:
valgrind:
valgrind: A must-be-redirected function
valgrind: whose name matches the pattern: strlen
valgrind: in an object with soname matching: ld-linux-x86-64.so.2
valgrind: was not found whilst processing
valgrind: symbols from the object with soname: ld-linux-x86-64.so.2
valgrind:
valgrind: Possible fixes: (1, short term): install glibc's debuginfo
valgrind: package on this machine. (2, longer term): ask the packagers
valgrind: for your Linux distribution to please in future ship a non-
valgrind: stripped ld.so (or whatever the dynamic linker .so is called)
valgrind: that exports the above-named function using the standard
valgrind: calling conventions for this platform. The package you need
valgrind: to install for fix (1) is called
valgrind:
valgrind: On Debian, Ubuntu: libc6-dbg
valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo
valgrind:
valgrind: Cannot continue -- exiting now. Sorry.
ayusman@ayusman-ubuntu:~/lcthw$
Puis-je faire quelque chose pour que valgrind fonctionne enfin?
J'ai Ubuntu 12.04 sur une boîte virtuelle. Mon ordinateur portable est un système d'exploitation Windows 7 64 bits.
12.04
software-installation
programming
c
Ayusman
la source
la source
Réponses:
J'ai essentiellement reçu le même message (sauf qu'il a
ld-linux-x86-64.so.2
été remplacé parld-linux.so.2
). J'avais installé Valgrind en utilisantapt-get
donc libc6-dbg était déjà inclus comme dépendance.Je n'ai pas encore complètement résolu cela, mais un indice est que l'erreur est en corrélation avec mon utilisation de
-m32
lors de la construction.Il semblerait donc que, dans mon cas, le problème est le manque d'une version 32 bits de libc6-dbg (ou de certains de ses composants), lors de la construction d'une installation 64 bits d'Ubuntu 12.04.
Solution (pour mon cas)
Pour moi, la commande suivante a fait fonctionner les choses ...
Ceci est discuté à https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236
Remarque: Le package
libc6-dbg:i386
n'apparaît pas comme une option disponible dans Synaptic ou via l'exécution de la commande deapt-get
- mais il était là quand même.la source
:i386
est la clé ici.libc6-dbg
était déjà indiqué dansvalgrind
le message d'erreur de.Ok, j'ai fait intsall libc6-dbg comme ça
et valgrind semble bien fonctionner.
Merci au lien du forum ubuntu:
http://ubuntuforums.org/showthread.php?t=1017692
la source
sudo apt-get install libc6-dbg:i386
pourrait être une solution en fonction du binaire à valider (64 bits vs 32 bits).Je me suis débattu avec cela pendant très longtemps, la compilation en mode -m32 a fonctionné, mais c'était une douleur dans le cul, de plus si je voulais utiliser par exemple -lcrypto, je ne pourrais pas compiler en -m32 car je n'avais pas openssl en 32 bits installé .
J'ai donc lu beaucoup de messages similaires, conseillant généralement d'installer libc6-dbg: i386 ... Je pense que cela a résolu le problème pour -m32, mais ce n'était pas ce que je cherchais. Donc, après un long moment, c'est arrivé à ceci: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html
Essayez donc d'exécuter dpkg -l libc6 * et si vous voyez libc6-amd64, cela pourrait vous aider. Mais lisez-le attentivement esp. point 2, car vous ne pourrez utiliser aucune commande après avoir supprimé le paquet libc6-amd64, alors préparez un liveCD et suivez les instructions :) Cela m'a aidé à résoudre le problème, mais cela m'a pris environ 3 heures et quelques moments de peur . Je recommande de sauvegarder vos données avant de le faire, car si vous échouez, il n'y aura probablement pas de retour.
Et attention au point 4! Vous ne pouvez pas simplement écrire la commande suggérée
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2
car cela créerait un lien symbolique dans le/
dossier live cd . Vous devez également avoir les droits root pour écrire sur lib64. Alors, comment je l'ai fait: (j'avais un dossier / sur mon disque valgrind cassé ouvert via le terminal liveCD)1)
sudo rm ./lib64/ld-linux-x86-64.so.2 //removing old link
2)
sudo ln -s /lib/x86_64-linux-gnu/ld-2.17.so ./lib64/ld-linux-x86-64.so.2
//you refer to the file on the disk with broken linux, but if you wrote just / instead of ./ you would create the link in the liveCD / folder
J'espère que je n'ai rien oublié et ce sera utile.
PS: je me demande s'il est possible de changer le lien symbolique avant de supprimer le paquet libc6-amd64 (vous contourneriez tout le liveCD) mais je ne suis pas sûr.
la source