使用Linaro Toolchain的ARM的Valgrind需要带有Buildroot的libc6-dbg

时间:2012-11-16 14:54:58

标签: arm valgrind cross-compiling glibc buildroot

我使用以下命令与我的Ubuntu 10.04主机上的Linaro工具链交叉编译Valgrind(http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2)(我正在使用Buildroot):

export PATH=$PATH:/home/user/toolchain/linaro/bin
CC=arm-linux-gnueabi-gcc CFLAGS=-I/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/include LDFLAGS=-L/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/lib ./configure --prefix=/opt/valgrind --host=armv7-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-ubuntu-linux
make
sudo make install

当我将二进制文件复制到ARM目标板时,出现以下错误:

==413== Memcheck, a memory error detector
==413== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==413== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==413== Command: /home/user/testApp
==413== 

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:      memcpy
valgrind:  in an object with soname matching:   ld-linux.so.3
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux.so.3
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.

我的Linaro工具链版本是:

gcc version 4.7.1 20120402 (prerelease) (crosstool-NG linaro-1.13.1-2012.04-20120426 - Linaro GCC 2012.04) 

我在Google上搜索过但无法找到解决方法。我怎样才能让Valgrind在我的目标板上工作?我使用Buildroot来构建我的系统,但libc6-dbg不是我在构建系统中可以找到的包。我需要从工具链sysroot中复制一些目录或文件吗?谢谢 -

我用来运行Valgrind的命令如下所示:

# which valgrind
/usr/bin/valgrind
# valgrind /home/user/MyQtApp
==216== Memcheck, a memory error detector
...
...

4 个答案:

答案 0 :(得分:5)

所以你使用Buildroot或OpenEmbedded来构建你的Libc?

如果是OE,则应该在本地存储库(TMPDIR / deploy / ipk)中提供libc6-dbg软件包。或者将“dbg-pkgs”添加到IMAGE_FEATURES中并重建图像。

Glibc 2.12显示您使用的是旧版OpenEmbedded。但即使这样也应该给你libc6-dbg包。

无法使用Buildroot,因为从未使用它。

答案 1 :(得分:2)

我一直面临同样的问题,并找到了解决方案。 因此,如果有人面对它,这就是我发生事情的方式: Valgrind无法调试应用程序的原因是C库中缺少符号。 在使用外部工具链(Linaro)构建buildroot时,我们可以在Linaro树中找到非剥离的C库。 在arm-linux-gnueabihf \ libc \ lib \ arm-linux-gnueabihf文件夹中,您将找到非剥离的库。 只需复制目标上的非剥离文件即可。就是这样。 希望这会对其他人有所帮助。

答案 2 :(得分:1)

您需要在目标中解除未经提取的图书馆。

有两种方法可以做到。

在你的buildroot配置中

1-制作未剥离的系统:BR2_STRIP_none = y 它将成为一个非常大的目标图像

2-仅解压缩librairie文件夹。 BR2_STRIP_EXCLUDE_DIRS = “LIB”

答案 3 :(得分:0)

抱歉,我正在给你一个我自己没有使用过的包裹的链接,但希望它会起作用:

https://launchpad.net/ubuntu-leb/oneiric/armel/libc6-dbg