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

2023-11-04

      关于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/bash

if [ $# != 1 ]; then
    echo "usage: $0 system_architect"
    echo "e.g: build armv7: $0 0; build aarch64: $0 1"
    exit 1
fi

if [ $1 != 0 -a $1 != 1 ]; then
    echo "input param can only be 0 or 1: \"$0 0\" or \"$0 1\""
    exit 1
fi

toolchain_path=${HOME}/Disk/Soft/android-ndk-r14b
echo "toolchain path: ${toolchain_path}"

if [ $1 == 0 ]; then
    echo "build android armv7"

    export AR=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
    export LD=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
    export CC=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    export 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-ranlib
    export STRIP=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip

    bash autogen.sh

    CPPFLAGS="--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=/sdcard

    make -j4
    make install DESTDIR=`pwd`/install_armv7
fi

if [ $1 == 1 ]; then
    echo "build android aarch64"

    export AR=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
    export LD=${toolchain_path}/ttoolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld
    export CC=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc
    export 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-ranlib
    export STRIP=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip

    bash autogen.sh

    CPPFLAGS="--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=/sdcard

    make -j4
    make 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

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤 的相关文章

随机推荐

  • 解谜元宇宙元年的十个疑问

    解谜元宇宙元年的十个疑问 2021年 元宇宙突然出现在大家的视野之中 相关概念受到资本的热捧 成为金融市场的热点 这难免会让我们对元宇宙产生很多好奇和疑问 本文总结了十个对元宇宙的疑问 并一一作出解答 2021年为什么是元宇宙元年 元宇宙
  • 关于运算放大器电流流向的问题

    前言 一 问题的引入 二 提出问题 三 问题解答 写在结尾的话 前言 问题缘起于一次硬件同事之间的讨论 虽然目前我不是做硬件的 但签于我的专业以及之前从事的工作 觉得有必要把记录下来 后期也打算写一些站在学习者的角度 关于硬件知识的学习心得
  • 数字电路和模拟电路-8触发器

    前言 掌握锁存器原理及应用 基本SR锁存器 钟控SR锁存器 钟控D锁存器 钟控D锁存器的动态参数 掌握触发器原理及应用 主从触发器 维持阻塞触发器 其它功能的触发器 目录 一 基本SR锁存器 1 双稳态电路 Bistate Elements
  • Android系统Unity使用HttpWebRequest访问Https请求出现连接超时

    多渠道版本配置网络地址时 http地址替换为了https 由于粗心大意 之前同事遗留的请求框架代码没有对https协议进行 处理 导致在android手机下unity访问https地址进行配置文件下载更新时出现连接超时问题 解决方案 if
  • word vba设置表格样式

    Sub 表格处理 功能 光标在表格中处理当前表格 否则处理所有表格 Application ScreenUpdating False 关闭屏幕刷新 Application DisplayAlerts False 关闭提示 On Error
  • java连接db2数据库示例代码_java实现连接db2数据库的代码实例

    java实现连接db2数据库的代码实例 第一种 目前ibm一直都没有提供type 1的jdbc驱动程序 第二种 类型2驱动 com ibm db2 jdbc app db2driver 该驱动也位于包db2java zip中 jdk必须能访
  • uniapp 微信小程序长按识别二维码,跳转小程序、个人微信

    前言 业务要求是小程序放一个二维码图片 长按可以识别二维码 进而识别出个人微信 添加个人微信 我们可以通过uni previewImage OBJECT 或者 wx previewImage Object object 预览当前图片去实现
  • 24-系统自带的 Win+R 功能

    Win 运行窗口 Win R 开始菜单 gt 运行 是 Windows 的一个原生的功能 从 XP 到 Windows 10 都自带了 当用户按下快捷键 Win R Win 为键盘上Windows图标键 后 系统会弹出一个小窗口让你输入命令
  • 用户态虚拟化IO通道实现概览及实践(上)

    自虚拟化技术诞生起 提升虚拟化场景中IO设备性能和驱动的兼容性 可扩展性一直是备受关注和追求的目标 随着半虚拟化技术的出现 virtio设备及驱动也很快流行并逐步变成了虚拟化应用中的主要IO通道形态 例如 virtio现已支持实现的设备涵盖
  • Dell IDRAC服务器重装系统详解(远程连接)

    主要的操作步骤文末附上的那篇博客写的比较详细了 不足的地方是有一些小问题没有说明白 导致新手可能不太清楚操作 而无法 复现 安装过程 TIPS 1 远程连接登录的时候 用户名root 密码calvin不一定可行 如果不行的话 看一下服务器机
  • 研一Python基础课程第四周课后习题分享(含源代码)

    代码写的较多 有问题可以私聊我 第四周作业分享 一 题目前言 二 题目分享 1 问题1 2 问题2 3 问题3 4 问题4 5 问题5 6 问题6 7 问题7 8 问题8 9 问题9 10 问题10 11 问题11 12 问题12 13 问
  • 深度学习之经典案例 CIFAR10 图形识别(jupyter)

    图像识别 CIFAR10图形识别 1 CIFAR10数据集共有60000张彩色图像 这些图像式32 32 3 分为10个类 每个类6000张 2 这里面有50000张用于训练 构成5个训练批 每一批10000张图 另外10000张用于测试
  • Centos7网卡配置——动态与静态

    Centos7网卡配置 一 自动获取动态IP地址 二 配置静态IP地址 三 修改网卡注意事项 四 基础知识 以下实例全部基于VM虚拟机操作 一 自动获取动态IP地址 1 输入命令 ip addr 查看IP地址 右下图可以发现只有一张名为en
  • git版本回退到某一次提交

    背景 今天一个前端女同事问我她如何才能回退到上一次她提交的版本 她网上找了方法 却没有起作用 问题虽然简单 但是还是记录下来 解决问题 使用命令 git log查看提交记录 并复制下想要回退到那个版本的commitId 就是commit后面
  • 医学图像肝脏分割(一)---预处理

    预处理是肝脏分割重要的一步 良好的预处理过程可以有效的提高分割的准确度 此博文主要记录肝脏分割过程中常见的预处理方法及相关代码 一 标准的预处理过程 1 Kaggle LUNA16 competition preprocessing tut
  • 创建Component的方式

    createClass createClass 组件的props state等都是以对象属性的方式组合在一起 其中默认属props和初始state都是返回对象的函数 component component state是通过在构造函数中对th
  • php通过递归获取分公司的上下级数据

    1 表结构 2 php核心代码 param branches 全部分公司数据 param parentId 查询的分公司id 传0则全部排序 大于0 则查询该分公司下的下级 param int level 层级 方便界面特效 param i
  • html怎么给背景图固定位置,css实现固定背景图像的方法

    css实现固定背景图像的方法 发布时间 2020 08 29 11 26 59 来源 亿速云 阅读 81 作者 小新 小编给大家分享一下css实现固定背景图像的方法 相信大部分人都还不怎么了解 因此分享这篇文章给大家参考一下 希望大家阅读完
  • 重磅!《2022中国开源发展蓝皮书》正式发布

    作为数字时代的新趋势 开源正以 开放 共享 协同 商业模式 的新型生产方式 以 自由 的传播形式 成为全球信息技术发展的强大推动力 在全世界开源大发展的背景下 近年来中国开源的发展速度已成为全球最快 局部领域已接近或达到世界先进水平 其迸发
  • Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

    关于Valgrind的介绍可以参考 https blog csdn net fengbingchun article details 50196189 这里介绍下在Ubuntu 16 04上通过android toolchain如andro