Valgrind does debug error
I have been trying to follow the online tutorial for Learn C The Hard Way.
However after setting up valgrind (I followed other links that help setting up valgrind on ubuntu 12.04), when I try to debug the c executable, I find the following errors.
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$
Is there something that I can do to make valgrind finally work?
I have ubuntu 12.04 on virtual box. My laptop is a Windows 7 64 bit OS.
Solution 1:
I got essentially the same message (except that ld-linux-x86-64.so.2
was replaced by ld-linux.so.2
). I had installed Valgrind using apt-get
so libc6-dbg was already included as a dependency.
I haven't fully resolved this yet, but a clue is that the error correlates with my use of -m32
when building.
So it would seem that, in my case, the problem is the lack of a 32-bit version of libc6-dbg (or some of its components), when building on a 64-bit install of Ubuntu 12.04.
Solution (for my case)
For me, the following command made things work...
sudo apt-get install libc6-dbg:i386
This is discussed at https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236
Note: The package libc6-dbg:i386
doesn't show up as an available option in Synaptic or via command-completion of apt-get
-- but it was there anyway.
Solution 2:
Ok, I did intsall libc6-dbg like so
sudo apt-get install libc6-dbg
and valgrind seems to work fine.
Thanks to the ubuntu forum link:
http://ubuntuforums.org/showthread.php?t=1017692