Eu tenho tentado seguir o tutorial on-line para Learn C The Hard Way .
No entanto, depois de configurar o valgrind (segui outros links que ajudam a configurar o valgrind no ubuntu 12.04), quando tento depurar o executável c, encontro os seguintes erros.
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$
Existe algo que eu possa fazer para finalmente fazer o valgrind funcionar?
Eu tenho o ubuntu 12.04 na caixa virtual. Meu laptop é um sistema operacional Windows 7 de 64 bits.
12.04
software-installation
programming
c
Ayusman
fonte
fonte
Respostas:
Recebi essencialmente a mesma mensagem (exceto que
ld-linux-x86-64.so.2
foi substituída porld-linux.so.2
). Eu instalei o Valgrind usandoapt-get
o libc6-dbg já estava incluído como uma dependência.Ainda não o resolvi completamente, mas uma pista é que o erro está correlacionado com o meu uso
-m32
ao criar.Portanto, parece que, no meu caso, o problema é a falta de uma versão de 32 bits do libc6-dbg (ou de alguns de seus componentes), ao criar uma instalação de 64 bits do Ubuntu 12.04.
Solução (para o meu caso)
Para mim, o seguinte comando fez as coisas funcionarem ...
Isso é discutido em https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236
Nota: O pacote
libc6-dbg:i386
não aparece como uma opção disponível no Synaptic ou via conclusão do comandoapt-get
- mas ele estava lá de qualquer maneira.fonte
:i386
é a chave aqui.libc6-dbg
já foi sugerido navalgrind
mensagem de erro.Ok, eu fiz intsall libc6-dbg assim
e valgrind parece funcionar bem.
Graças ao link do fórum do ubuntu:
http://ubuntuforums.org/showthread.php?t=1017692
fonte
sudo apt-get install libc6-dbg:i386
pode ser uma solução dependendo do binário a ser valgrinded (64 bits vs 32 bits).Eu lutei com isso por um longo tempo, compilar no modo -m32 funcionou, mas foi um pé no saco, além disso, se eu quisesse usar, por exemplo, -lcrypto, não poderia compilar no -m32, pois não tinha o openssl instalado em 32 bits .
Então, li várias postagens semelhantes, geralmente aconselhando a instalação da libc6-dbg: i386 ... Acho que isso resolveu o problema do -m32, mas não era o que eu estava procurando. Então, depois de muito tempo, chegou a isso: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html
Portanto, tente executar o dpkg -l libc6 * e, se vir libc6-amd64, isso poderá ajudá-lo. Mas leia com atenção, esp. ponto 2, porque você não poderá usar nenhum comando depois de remover o pacote libc6-amd64, então prepare um liveCD e siga as instruções :) Isso me ajudou a resolver o problema, mas demorei cerca de 3 horas e alguns momentos de medo . Eu recomendo fazer backup de seus dados antes de fazer isso, porque se você falhar, provavelmente não haverá caminho de volta.
E tenha cuidado no ponto 4! Você não pode simplesmente escrever o comando sugerido lá,
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2
porque criaria um link simbólico na/
pasta do live cd . Além disso, você precisa ter direitos de root para gravar na lib64. Então, como eu fiz isso: (eu tinha / a pasta no meu disco quebrado do valgrind aberta através do terminal do 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
Espero não ter esquecido nada e isso será útil.
PS: Gostaria de saber se é possível alterar o link simbólico antes de remover o pacote libc6-amd64 (você ignoraria todo o material do liveCD), mas não tenho certeza.
fonte