valgrind-cross-compile-and-usage

首先$PATH环境变量中包含了aarch64-linux-gcc的路径

测试程序

1
2
3
4
5
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *array = malloc(sizeof(int));
return 0;
}

测试程序编译

1
aarch64-linux-gcc -g demo.c -o /tmp/demo

需要添加-g参数,并且不要strip

交叉编译valgrind

当前使用的版本是de2cd7f6f9ad06fbe390d37503557718ec15fab4

1
2
3
4
5
git clone git://sourceware.org/git/valgrind.git
cd valgrind/
./autogen.sh
./configure --prefix=${PWD}/install --host=aarch64-linux CC=aarch64-linux-gcc CXX=aarch64-linux-g++ AR=aarch64-linux-ar
make && make install

如果是其他平台,--host部分可参考./configure文件内部的case "${host_cpu}" in部分修改

程序运行

install里面的库和程序不要strip,否则会丢失部分关键信息。
拷贝整个install目录到设备的/tmp目录
然后在设备运行:

1
2
3
4
cd /tmp/install
export PATH=$PATH:$PWD/bin
export VALGRIND_LIB=$PWD/libexec/valgrind
valgrind --tool=memcheck --leak-check=full ./demo