18

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.

1
  • valgrind worked fine for me out of the box, but i can't say what libraries i already had installed. valgrind is available from repo. you don't need to compile is like learn C the hard way states. installing from repo will handle the dependency issue for you Jun 8, 2012 at 17:54

3 Answers 3

42

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.

6
  • There's a good change you'll need help building first: stackoverflow.com/a/7412698/86967 Jun 3, 2013 at 19:44
  • this should be marked as correct; the :i386 is the key here. Dec 7, 2013 at 10:36
  • It was the 32-bit that did the trick!
    – Cardin
    Dec 12, 2013 at 10:08
  • 1
    This solved it for me.. I was seeing this error on a vagrant machine. As the other commenters said, this should be marked as correct. (libgc-dbg was already installed as a valgrind dependency, it was the i386 that did the trick)
    – Ken
    Mar 20, 2014 at 17:11
  • This answer correctly dealt with 32bit binaries. libc6-dbg was already hinted in valgrind's error message.
    – leesei
    Dec 18, 2014 at 3:10
11

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

2
  • @Goaler444 I just did. Thanks for reminding.
    – Ayusman
    Apr 17, 2013 at 23:07
  • as the other answer points, doing sudo apt-get install libc6-dbg:i386 could be a solution depending on the binary to be valgrinded (64 bits vs 32 bits).
    – logoff
    Aug 5, 2014 at 8:54
0

I struggled with this for a very long time, compiling in -m32 mode worked, but it was a pain in the ass, moreover if I wanted to use e.g. -lcrypto, I couldnt compile in -m32 since I didnt have openssl in 32bit installed.

So I read through a lot of similar posts, usually advising installing libc6-dbg:i386 ... I think this solved the problem for -m32, but it wasnt what I was looking for. So after a long time a came to this: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

So try running dpkg -l libc6* and if you see libc6-amd64, this could help you. But read it carefully esp. point 2, cause you wont be able to use any commands after you remove the libc6-amd64 package, so prepare a liveCD and follow the instructions :) It helped me solve the problem, but it took me about 3 hours and couple of fear moments. I recommend to backup your data before you do that, because if you fail, there will be probably no way back.

And be carefull at point 4! You cant simply write the command suggested there
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 because it would make a symbolic link in the live cd / folder. Also you have to have root rights to write to lib64. So how I did it was: (i had / folder on my broken valgrind disk opened through the liveCD terminal)

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

Hope I didnt forget anything and this will be helpful.

P.S: I wonder if it is possible to change the symlink before you remove the libc6-amd64 package (you would bypass the whole liveCD stuff) but Im not sure.

1
  • Please watch your language !!!
    – Panther
    Apr 9, 2015 at 23:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .