我将Valgrind编译成openwrt x86平台.在目标上运行时,它不会检测到任何泄漏.在Ubuntu上,它工作正常.
我的测试程序很简单
main()
{
char *p = malloc(10000);
*(p-1) = 1;
}
Run Code Online (Sandbox Code Playgroud)
相关的编译步骤
i486-openwrt-linux-uclibc-gcc -c -o leak.o -pipe -march=i486 -fhonour-copts -I/home/r2/external/openwrt/staging_dir/target-i386_uClibc-0.9.30.1/usr/include -I/home/r2/external/openwrt/staging_dir/target-i386_uClibc-0.9.30.1/include -I/home/r2/external/openwrt/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/include -O0 -g -I. -Idbus -I/home/r2/external/openwrt/staging_dir/target-i386_uClibc-0.9.30.1/usr/include leak.c
leak.c: In function 'main':
leak.c:3: warning: incompatible implicit declaration of built-in function 'malloc'
CC leak.c
i486-openwrt-linux-uclibc-gcc leak.o -L/hom e/r2/external/openwrt/staging_dir/target-i386_uClibc-0.9.30.1/usr/lib -L/home/r2/external/openwrt/staging_dir/target-i386_uClibc-0.9.30.1/lib -L/home/r2/external/openwrt/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/lib -o leak
LD leak
Run Code Online (Sandbox Code Playgroud)
它没有静态链接.objdump证实了这一点
objdump -x build_dir/target-i386_uClibc-0.9.30.1/test/leak
build_dir/target-i386_uClibc-0.9.30.1/test/leak: file format elf32-i386
build_dir/target-i386_uClibc-0.9.30.1/test/leak
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048340
Program Header:
PHDR off 0x00000034 vaddr …Run Code Online (Sandbox Code Playgroud)