1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

时间:2023-08-19 19:45:37

相关推荐

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

关于Valgrind的介绍可以参考:/fengbingchun/article/details/50196189.

这里介绍下在Ubuntu 16.04上通过android toolchain如android-ndk-r14b交叉编译Valgrind源码的操作步骤:

1.从 / 下载最新的版本3.17.0,解压缩,并将终端定位到主目录;

2.从官网/ndk/downloads/older_releases#ndk-14b-downloads下载android-ndk-r14b并解压缩;

3.编写脚本build_android.sh,内容如下:此脚本既支持armv7也支持aarch64,在valgrind主目录下执行此脚本

#! /bin/bashif [ $# != 1 ]; thenecho "usage: $0 system_architect"echo "e.g: build armv7: $0 0; build aarch64: $0 1"exit 1fiif [ $1 != 0 -a $1 != 1 ]; thenecho "input param can only be 0 or 1: \"$0 0\" or \"$0 1\""exit 1fitoolchain_path=${HOME}/Disk/Soft/android-ndk-r14becho "toolchain path: ${toolchain_path}"if [ $1 == 0 ]; thenecho "build android armv7"export AR=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-arexport LD=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ldexport CC=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gccexport CXX=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++export RANLIB=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlibexport STRIP=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-stripbash autogen.shCPPFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm" \CFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm" \./configure \--prefix=/ \--host=armv7-unknown-linux \--target=armv7-unknown-linux \--with-tmpdir=/sdcardmake -j4make install DESTDIR=`pwd`/install_armv7fiif [ $1 == 1 ]; thenecho "build android aarch64"export AR=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-arexport LD=${toolchain_path}/ttoolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ldexport CC=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gccexport CXX=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-g++export RANLIB=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ranlibexport STRIP=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-stripbash autogen.shCPPFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm64" \CFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm64" \./configure \--prefix=/ \--host=aarch64-unknown-linux \--target=aarch64-unknown-linux \--with-tmpdir=/sdcardmake -j4make install DESTDIR=`pwd`/install_aarch64fi

4.解决编译时的error:oredump-elf.c:149:4:error:conflictingtypesfor'Elf32_Nhdr',修改源码coregrind/m_coredump/coredump-elf.c,将文件中结构体名Elf32_Nhdr调整为Elf32_Nhdr_,此结构体好像并没有用到

5.执行完脚本后,会在valgrind主目录下生成install_armv7和install_aarch64目录,结构如下:bin目录下存放着valgrind可执行文件,libexec/valgrind目录下存放着所需的动态库。注意:(1).valgrind的旧版本动态库的存放位置是lib/valgrind目录;(2).在编译完armv7或aarch64后,如继续编译另一个架构,需先执行make clean,再执行./build_android.sh 0或./build_android.sh 1

6.将install_armv7或install_aarch64拷贝到手机上,查看valgrind版本,结果如下:可见valgrind执行正确。注意:(1).新版本valgrind的VALGRIND_LIB为./install_aarch64/libexec/valgrind,在旧版本中为./install_aarch64/lib/valgrind;(2).当测试的可执行文件依赖其它动态库时,需要用LD_LIBRARY_PATH指定依赖动态库所在的目录;(3).如在执行过程中,遇到类似以下错误时"valgrind:Can'tcreateclientcmdlinefilein/data/local/tmp/valgrind_proc_xxxx_cmdline_yyyyyyyy",在原有命令基础上,添加TMPDIR=.即可,如TMPDIR=.VALGRIND_LIB=./install_aarch64/libexec/valgrindLD_LIBRARY_PATH=target/android-aarch64/ ./install_aarch64/bin/valgrind --leak-check=full --log-file=log.txt ./build/CppBaseTest

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。