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

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

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

2. 从官网https://developer.android.com/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 1
fiif [ $1 != 0 -a $1 != 1 ]; thenecho "input param can only be 0 or 1: \"$0 0\" or \"$0 1\""exit 1
fitoolchain_path=${HOME}/Disk/Soft/android-ndk-r14b
echo "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_armv7
fiif [ $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_aarch64
fi

4. 解决编译时的error:oredump-elf.c:149:4: error: conflicting types for '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't create client cmdline file in /data/local/tmp/valgrind_proc_xxxx_cmdline_yyyyyyyy",在原有命令基础上,添加TMPDIR=. 即可,如TMPDIR=. VALGRIND_LIB=./install_aarch64/libexec/valgrind LD_LIBRARY_PATH=target/android-aarch64/ ./install_aarch64/bin/valgrind --leak-check=full --log-file=log.txt ./build/CppBaseTest

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤相关推荐

  1. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序 (学习老罗的)

    不得不说,老罗写的太好了. 按照他的方法,我两次就成功了. 不过有点让人奇怪的地方就是 第一次我make snod是成功的 但是执行如下代码:       root@android:/ # cd sy ...

  2. 在Ubuntu上为Android系统编写Linux内核驱动程序(学习老罗的)

    首先提出2个问题 1. 驱动程序的作用是什么? 答:驱动程序的作用主要是向上层提供访问设备寄存器的一个接口,包括读和写. 2. 访问设备驱动程序的方法? 答:a. 通过proc文件系统来访问:b. 通 ...

  3. 在 Ubuntu 上安装 Android Studio

    在 Ubuntu 上安装 Android Studio http://www.linuxidc.com/Linux/2013-05/84812.htm 打开terminal,输入以下命令 sudo a ...

  4. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序 3

    在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文 ...

  5. Android 8.0 linux内核,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序---Android8.0版本实现-对照老罗版本...

    老罗版本参见:https://blog.csdn.net/luoshengyang/article/details/6573809 在Android硬件抽象层(HAL)概要介绍和学习计划一文中,我们简 ...

  6. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6571210 在前一篇文章中,我们介绍了如何在U ...

  7. android驱动开发 老罗,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)...

    在Android硬件抽象层(HAL)概要介绍和学习计划一文中,我们简要介绍了在Android系统为为硬件编写驱动程序的方法.简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的 ...

  8. andriod驱动之旅-在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务(8)

    我们在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务.那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务 ...

  9. Ubuntu 所需要的中文字体美化操作步骤

    中文字体美化是个很讨厌的事情,无数初学者在这里面浪费了无数时间,做了无数没有意义的事情.但这也是不得不做的,我把 Debian/Ubuntu 所需要的中文字体美化操作步骤详细记录在这里,希望能节约大家 ...

最新文章

  1. 一文掌握异常检测的实用方法 | 技术实践
  2. 从构建分布式秒杀系统聊聊限流特技
  3. Pair Project: API设计 by Xiao Li and Yishi Xing
  4. Python数据结构和算法
  5. XidianOJ 1123 K=1 Problem of Orz Pandas
  6. scanf()函数错误把输入缓存里的回车作为一次字符输入
  7. linux进程线程协程的区别,进程和线程、协程的区别
  8. Python爬虫入门教程 44-100 Charles的安装与使用-手机APP爬虫部分
  9. Spark 1.0.0版本号公布
  10. MacBook M1 虚拟机安装Windows7 Xp
  11. 读书笔记-人月神话8
  12. 如果你是互联网创业者,这个视频值1万元
  13. 美国弗吉尼亚大学计算机科学,弗吉尼亚大学计算机科学专业排名第30(2020年USNEWS美国排名)...
  14. unexpected error while obtaining UI hierarchy
  15. 机器人三星云顶之弈_机器码|云顶之弈10.16三星机器人加强介绍-云顶之弈10.16三星机器人加强了吗_234游戏网...
  16. 学习《第一行代码Android》(郭霖著)过程中遇到的问题及解惑总结
  17. Android命令-重点命令-pm/am/content/wm/appops
  18. Surface Slim Pen吸附在Pro 8上的尝试
  19. PHPMyWind编辑器支持Word上传
  20. zabbix邮件报警和微信报警

热门文章

  1. 2020年Java程序员不得不学习的10大技术
  2. CS131专题-8:图像纹理
  3. 【opencv】(2) 图像处理:边界填充、图像融合、图像阈值、数值计算
  4. Windows下PCL1.9.1配置(编译源码)
  5. 基于C++的本征图像分解(Intrinsic Image Decomposition)
  6. 两种方法动态加载外部原生JS文件
  7. 在Linux部署Nodejs项目,一旦断掉XShell就会导致服务被停掉,真的很郁闷~怎么办?果断用forever
  8. 【3】npm run build Vue的项目,如何修改相对路径配置
  9. Unity初学Shadergraph创建着色器学习教程
  10. 系统crash无法启动 tpm error / could not read size 0x8000000e