Valgrind交叉编译

本文介绍了如何在Linux上下载并配置Valgrind,特别是在使用特定架构的交叉编译器时的注意事项。作者提到Valgrind对某些平台支持良好,但可能在特定环境下需要安装额外的调试信息包。
摘要由CSDN通过智能技术生成

        Valgrind下载地址:https://valgrind.org/downloads/

        下载到linux之后执行如下命令:

./configure CC=/opt/hisi-linux/x86-arm/aarch64-himix200-linux/bin/aarch64-himix200-linux-gcc CXX=/opt/hisi-linux/x86-arm/aarch64-himix200-linux/bin/aarch64-himix200-linux-g++ AR=/opt/hisi-linux/x86-arm/aarch64-himix200-linux/bin/aarch64-himix200-linux-ar --host=aarch64-himix200-linux --prefix=/home/teddy/project_app/software/valgrind-3.22.0/_install
make
make install

        注意:在执行./configure执行的时候,有很多博主说需要修改configure文件将 armv7*改为armv7* |arm 或者将configure的参数使用:--host=armv7-linux;其实没必要,只需要使用交叉编译工具给定的架构即可;

        例如我是用的交叉编译工具为:aarch64-himix200-linux-gcc则将host指定为aarch64-himix200-linux:

--host=aarch64-himix200-linux#去掉最后面的-gcc即可

        Valgrind支持很多平台,给出交叉编译工具的架构即可自动匹配合适的指令集;对于有的编译器而言使用--host=armv7-linux可能会报错:

//使用aarch64-himix200-linux-gcc编译器就会出现该问题
aarch64-himix200-linux-gcc: error: unrecognized command line option '-marm'; did you mean '-fasm'?

        如果出现以下问题:

/xxx/aarch64-linux-gnu/bin/ld: vbit_test-unary.o: Relocations in generic ELF (EM: 62)

        这可能时你之前使用了--host=armv7-linux或者其他编译器没有清理make生成的文件,执行make而导致的;如果之前报错,修改后最好make clean或者重新解压工具包按照正确的方法重新编译。

        正确编译后就会在指定的目录_install目录生成可执行文件,库文件等可移植文件。会生成如下资源:

bin  include  lib  libexec  share

        其中lib中是静态库,可以不用移植到开发板;将bin,libexec两个目录移植到板子上,假设路径是:/mmc_data/tools/valgrind;将bin,libexec两个目录放到该目录下,然后设置环境变量:

//设置可执行文件的环境变量
export PATH=/mmc_data/tools/valgrind/bin:$PATH
//添加libexec库环境变量,VALGRIND_LIB是用户自定义的宏;
//它指向 Valgrind 工具的库的路径。这样设置环境变量后,系统中的程序可以通过使用 
//$VALGRIND_LIB 这个变量来引用 Valgrind 的库路径,以确保正确地使用 Valgrind 工具和功能。
//libexec是valgrind工具所需的动态库
export VALGRIND_LIB=/mmc_data/tools/valgrind/libexec/valgrind

        运行指令:

valgrind --tool=memcheck --leak-check=full ./test

        如果出现以下错误:

==22742== Memcheck, a memory error detector
==22742== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==22742== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==22742== Command: /app/meta8k/meta8k_mat_server
==22742==

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-aarch64.so.1
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux-aarch64.so.1
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:  Note that if you are debugging a 32 bit process on a
valgrind:  64 bit system, you will need a corresponding 32 bit debuginfo
valgrind:  package (e.g. libc6-dbg:i386).
valgrind:
valgrind:  Cannot continue -- exiting now.  Sorry.

==22742== Memcheck, a memory error detector;这行是没事的,只是工具的打印信息;

7-15行是错误的:需要安装libc6-dbg;(编译器达到GCC 6)

        由于我是在海思3531上运行的,编译器达不到GCC 6,所以就没向大家展示正确用法;但是编译过程是正确的,说实话这个工具对于arm系统不太友好,不知道是不是只是海思芯片有这问题。

        GCC编译环境涉及到内核,uboot等,最好不要自己替换GCC 6相关的库,不然可能导致系统无法启动。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷茫的蜉蝣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值