Ok, Eu fiz intsall libc6-dbg como assim
sudo apt-get install libc6-dbg
e o valgrind parece funcionar bem.
Graças ao link do fórum do ubuntu:
Eu tenho tentado seguir o tutorial on-line para Aprenda C de maneira difícil .
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 fazer valgrind finalmente funcionar?
Eu tenho o Ubuntu 12.04 na caixa virtual. Meu laptop é um sistema operacional Windows 7 de 64 bits.
Recebi essencialmente a mesma mensagem (exceto que ld-linux-x86-64.so.2
foi substituído por ld-linux.so.2
). Eu tinha instalado o Valgrind usando apt-get
, então a libc6-dbg já estava incluída como uma dependência.
Ainda não resolvi totalmente isso, mas uma pista é que o erro está correlacionado ao meu uso de -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 dos seus componentes), ao construir uma instalação de 64 bits do Ubuntu 12.04.
Para mim, o seguinte comando fez as coisas funcionarem ...
sudo apt-get install libc6-dbg:i386
Isso é discutido no link
Nota: O pacote libc6-dbg:i386
não aparece como uma opção disponível no Synaptic ou via conclusão de comando de apt-get
- mas estava lá de qualquer maneira.
Eu lutei com isso por um longo tempo, compilando no modo -m32 funcionou, mas foi uma dor no rabo, além disso, se eu quisesse usar, e. -lcrypto, eu não poderia compilar em -m32 desde que eu não tinha openssl em 32bit instalado.
Então eu li muitos posts similares, geralmente aconselhando a instalação do libc6-dbg: i386 ... Eu acho que isso resolveu o problema para -m32, mas não era o que eu estava procurando. Então, depois de um longo tempo, chegou a isso: link
Portanto, tente executar o dpkg -l libc6 * e, se vir o libc6-amd64, isso poderá ajudá-lo. Mas leia cuidadosamente esp. ponto 2, porque você não será capaz de 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 eu levei 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 ele criaria um link simbólico na pasta live cd /
.
Além disso, você precisa ter direitos de root para gravar na lib64.
Então, como eu fiz foi: (eu tinha / pasta no meu disco valgrind quebrado aberto através do 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
// você se refere ao arquivo no disco com o linux corrompido, mas se você escreveu apenas / ao invés de ./ você criaria o link no liveCD / folder
Espero não ter esquecido nada e isso será útil.
P.S: Gostaria de saber se é possível alterar o link simbólico antes de remover o pacote libc6-amd64 (você deve ignorar todo o material do liveCD), mas não tenho certeza.