交叉编译valgrind

valgrind编译注意事项:

1. --prefix的路径必须和手机上实际运行的目录是一致的,不然运行valgrind会报错:

failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory"

2. 用ndk-r11c,valgrind版本3.12,编译出来在android6.0上跑,结果总是显示有泄露,运行不正确。

 

todo:

1. 需要查看具体内存泄露的代码行号,需要在编译时带上-g选项,同时执行的程序必须是带调试符号的版本。

2. /data/local/Inst/bin/valgrind -v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=memcheck --leak-check=full --show-reachable=yes /data/local/tmp/test_demo

 

交叉编译步骤:

1. 编写valgrind交叉编译脚本build.sh,并执行,然后生成makefile:

export NDKROOT=/Users/xxx/Library/Android/android-ndk-r11c
export ABI_DIR=arm-linux-androideabi-4.9
export ARCH=arm-linux-androideabi
export HWKIND=generic
#export VALGRIND_LIB=/data/local/valgrind/lib/valgrind/
# Set up toolchain paths.
#
# For ARM

export AR=$NDKROOT/toolchains/$ABI_DIR/prebuilt/darwin-x86_64/bin/$ARCH-ar
export LD=$NDKROOT/toolchains/$ABI_DIR/prebuilt/darwin-x86_64/bin/$ARCH-ld
export CC=$NDKROOT/toolchains/$ABI_DIR/prebuilt/darwin-x86_64/bin/$ARCH-gcc
export CXX=$NDKROOT/toolchains/$ABI_DIR/prebuilt/darwin-x86_64/bin/$ARCH-g++

export RANLIB=$NDKROOT/toolchains/$ABI_DIR/prebuilt/darwin-x86_64/bin/$ARCH-ranlib
export STRIP=$NDKROOT/toolchains/$ABI_DIR/prebuilt/darwin-x86_64/bin/$ARCH-strip


#export AR=$NDKROOT/toolchains/llvm/prebuilt/darwin-x86_64/bin/armeabi-v7a/
#export LD=$NDKROOT/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-link
#export CC=$NDKROOT/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang
#export CXX=$NDKROOT/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++

#export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ranlib
#export STRIP=$NDKROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-strip
#

# for ARM
CPPFLAGS="--sysroot=$NDKROOT/platforms/android-21/arch-arm -DANDROID_HARDWARE_$HWKIND" \
CFLAGS="--sysroot=$NDKROOT/platforms/android-21/arch-arm" \
   ./configure --prefix=/data/local/Inst --host=armv7-unknown-linux --target=armv7-unknown-linux --with-tmpdir=/sdcard
# note: on android emulator, android-14 platform was also tested and works.
# It is not clear what this platform nr really is.
#CPPFLAGS="--sysroot=$NDKROOT/platforms/android-23/arch-arm64" \
   #CFLAGS="--sysroot=$NDKROOT/platforms/android-23/arch-arm64" \
   #./configure --prefix=/data/local/Inst \
   #--host=aarch64-unknown-linux --target=aarch64-unknown-linux \
   #--with-tmpdir=/sdcard

2. make

交叉编译valgrind可以按照以下步骤进行操作: 1. 首先,确保你已经正确配置了交叉编译环境,并且已经安装了交叉编译工具链。 2. 下载valgrind的源代码,并解压缩。 3. 进入valgrind源代码目录,执行以下命令进行配置: ``` ./configure --host=<目标平台> --prefix=<安装路径> ``` 其中,`<目标平台>`是你要交叉编译的目标平台,比如arm-linux,`<安装路径>`是你要安装valgrind的路径。 4. 执行make命令进行编译: ``` make ``` 5. 编译完成后,执行make install命令进行安装: ``` make install ``` 6. 在目标板上设置valgrind的环境变量,可以通过在/etc/profile文件中添加以下内容: ``` export PATH=<安装路径>/bin:$PATH export VALGRIND_LIB=<安装路径>/lib/valgrind ``` 注意将`<安装路径>`替换为你实际的安装路径。 7. 保存/etc/profile文件,并执行以下命令使环境变量生效: ``` source /etc/profile ``` 这样,你就可以在目标板上使用交叉编译valgrind了。请注意,根据你的具体情况,可能需要根据错误提示进行一些额外的配置或调整。 #### 引用[.reference_title] - *1* *2* [Valgrind交叉编译(踩坑)](https://blog.youkuaiyun.com/weixin_41791581/article/details/127290653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [交叉编译Valgrind](https://blog.youkuaiyun.com/Reasonss/article/details/111218224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值