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