#内存泄露# #valgrind#valgrind-3.15.0 编译&&交叉编译

环境准备

valgrind-3.15.0 官网下载地址:http://valgrind.org/
编译环境:ubuntu16.04 x64
开发平台:TDA2X

下载好valgrind-3.15.0.tar.bz2文件后进行解压

tar xvf valgrind-3.15.0.tar.bz2

安装automake 

apt-get install automake 

运行autogen.sh开始配置

valgrind-3.15.0
./autogen.sh

配置

修改配置文件configure,否则配置指定的交叉编译工具可能以下错误会报

checking host system type... arm-unknown-linux-gnu checking for a supported CPU... no (arm) configure: error: Unsupported host architecture. Sorry
 找到armv7修改为 armv7*|arm*

     armv7*)
	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (${host_cpu})" >&5
$as_echo "ok (${host_cpu})" >&6; }
	ARCH_MAX="arm"
	;;
     armv7*|arm*)
	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (${host_cpu})" >&5
$as_echo "ok (${host_cpu})" >&6; }
	ARCH_MAX="arm"
	;;

由于我们需要交叉编译因此需要配置指定的编译工具

 ./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc CPP=arm-linux-gnueabihf-cpp CXX=arm-linux-gnueabihf-g++ --prefix=/opt/valgrind
  1. CC、CPP、g++指定为交叉编译的arm版本编译器
  2. --prefix:指定valgrind编译生成的可执行文件的保存路径,注意该路径必须和开发板上最好存放valgrind的路径一致,否则可能会报"valgrind: failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory"等类似错误。然而其实本质上的问题是执行valgrind时,没有找到valgrind的lib库!!!我们在lib下面可以看到还有一层目录valgrind,这时候我们在开发板/etc/profile文件中添加一行
           
    export VALGRIND_LIB=/opt/valgrind-3.15.0/lib/valgrind
    以下为lib/valgrind看的相关库文件
cll@cll-linux:/opt/valgrind-3.15.0/lib/valgrind $ pwd
/opt/valgrind-3.15.0/lib/valgrind
cll@cll-linux:/opt/valgrind-3.15.0/lib/valgrind $ ls
32bit-core-valgrind-s1.xml                mips-cp0-valgrind-s1.xml
32bit-core-valgrind-s2.xml                mips-cp0-valgrind-s2.xml
32bit-core.xml                            mips-cp0.xml
32bit-linux-valgrind-s1.xml               mips-cpu-valgrind-s1.xml
32bit-linux-valgrind-s2.xml               mips-cpu-valgrind-s2.xml
32bit-linux.xml                           mips-cpu.xml
32bit-sse-valgrind-s1.xml                 mips-fpu-valgrind-s1.xml
32bit-sse-valgrind-s2.xml                 mips-fpu-valgrind-s2.xml
32bit-sse.xml                             mips-fpu.xml
64bit-avx-valgrind-s1.xml                 mips-linux-valgrind.xml
64bit-avx-valgrind-s2.xml                 mips-linux.xml
64bit-avx.xml                             none-arm-linux
64bit-core-valgrind-s1.xml                power64-core2-valgrind-s1.xml
64bit-core-valgrind-s2.xml                power64-core2-valgrind-s2.xml
64bit-core.xml                            power64-core-valgrind-s1.xml
64bit-linux-valgrind-s1.xml               power64-core-valgrind-s2.xml
64bit-linux-valgrind-s2.xml               power64-core.xml
64bit-linux.xml                           power64-linux-valgrind-s1.xml
64bit-sse-valgrind-s1.xml                 power64-linux-valgrind-s2.xml
64bit-sse-valgrind-s2.xml                 power64-linux.xml
64bit-sse.xml                             power-altivec-valgrind-s1.xml
amd64-avx-coresse-valgrind.xml            power-altivec-valgrind-s2.xml
amd64-avx-coresse.xml                     power-altivec.xml
amd64-avx-linux-valgrind.xml              power-core-valgrind-s1.xml
amd64-avx-linux.xml                       power-core-valgrind-s2.xml
amd64-coresse-valgrind.xml                power-core.xml
amd64-linux-valgrind.xml                  power-fpu-valgrind-s1.xml
arm-core-valgrind-s1.xml                  power-fpu-valgrind-s2.xml
arm-core-valgrind-s2.xml                  power-fpu.xml
arm-core.xml                              power-linux-valgrind-s1.xml
arm-vfpv3-valgrind-s1.xml                 power-linux-valgrind-s2.xml
arm-vfpv3-valgrind-s2.xml                 power-linux.xml
arm-vfpv3.xml                             powerpc-altivec32l-valgrind.xml
arm-with-vfpv3-valgrind.xml               powerpc-altivec32l.xml
arm-with-vfpv3.xml                        powerpc-altivec64l-valgrind.xml
cachegrind-arm-linux                      powerpc-altivec64l.xml
callgrind-arm-linux                       power-vsx-valgrind-s1.xml
default.supp                              power-vsx-valgrind-s2.xml
dhat-arm-linux                            power-vsx.xml
drd-arm-linux                             s390-acr-valgrind-s1.xml
exp-bbv-arm-linux                         s390-acr-valgrind-s2.xml
exp-sgcheck-arm-linux                     s390-acr.xml
getoff-arm-linux                          s390-fpr-valgrind-s1.xml
helgrind-arm-linux                        s390-fpr-valgrind-s2.xml
i386-coresse-valgrind.xml                 s390-fpr.xml
i386-linux-valgrind.xml                   s390-vx-valgrind-s1.xml
lackey-arm-linux                          s390-vx-valgrind-s2.xml
libcoregrind-arm-linux.a                  s390-vx.xml
libmpiwrap-arm-linux.so                   s390x-core64-valgrind-s1.xml
libreplacemalloc_toolpreload-arm-linux.a  s390x-core64-valgrind-s2.xml
libvex-arm-linux.a                        s390x-core64.xml
libvexmultiarch-arm-linux.a               s390x-generic-valgrind.xml
massif-arm-linux                          s390x-generic.xml
memcheck-arm-linux                        s390x-linux64-valgrind-s1.xml
mips64-cp0-valgrind-s1.xml                s390x-linux64-valgrind-s2.xml
mips64-cp0-valgrind-s2.xml                s390x-linux64.xml
mips64-cp0.xml                            s390x-vx-linux-valgrind.xml
mips64-cpu-valgrind-s1.xml                s390x-vx-linux.xml
mips64-cpu-valgrind-s2.xml                vgpreload_core-arm-linux.so
mips64-cpu.xml                            vgpreload_dhat-arm-linux.so
mips64-fpu-valgrind-s1.xml                vgpreload_drd-arm-linux.so
mips64-fpu-valgrind-s2.xml                vgpreload_exp-sgcheck-arm-linux.so
mips64-fpu.xml                            vgpreload_helgrind-arm-linux.so
mips64-linux-valgrind.xml                 vgpreload_massif-arm-linux.so
mips64-linux.xml                          vgpreload_memcheck-arm-linux.so
cll@cll-linux:/opt/valgrind-3.15.0/lib/valgrind $ 

当然我们还可以在PATH="/usr/bin:/usr/sbin:/bin:/sbin:/app/bin:/opt/valgrind-3.15.0/bin",黑色为一些系统路径配置(根据你自己profile里面PATH路径),添加后面红色部分就行了,执行下source /etc/profile ,就可以当valgrind命令使用了

编译

sudo make
sudo make install

运行

拷贝编译的文件到开发版,最好目录为编译目录以防止找不到库,当然也可以

export VALGRIND_LIB=/opt/valgrind-3.15.0/lib/valgrind

添加当前valgrind的路径

export PATH=/opt/valgrind-3.15.0/bin:$PATH

运行....

    valgrind --tool=memcheck --leak-check=full ./xxx(需要监控的程序)

发布了170 篇原创文章 · 获赞 207 · 访问量 459万+

猜你喜欢

转载自blog.csdn.net/xiaoting451292510/article/details/104931772
今日推荐