尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

rust交叉编译 simpileperf

rust交叉编译 simpileperf
📅 发布时间:2026/6/20 3:19:12

以下的simpleperf目录替换为自己的文件目录 我这里使用的都是绝对路径

常见 simpleperf 编译命令

#WINDDOWS SDK path
F:\Android\Sdk\ndk\29.0.14206865\toolchains\llvm\prebuilt\windows-x86_64\bin
# -g: 收集函数调用栈信息 -o 指定output文件  采集时间5s 采集的二进制文件
simpleperf record -g -o /data/local/tmp/rust_dir/perf.data --duration 5 ./cross_rust

查看 android 平台,选用适合的交叉编译

getprop ro.product.cpu.abi#模拟器 output
x86_64

为 rust 进行交叉编译(以 x86_64 为例子)

#临时镜像加速
#$env:RUSTUP_UPDATE_ROOT="https://mirrors.sjtug.sjtu.edu.cn/rust-static/rustup/"
#$env:RUSTUP_DIST_SERVER="https://mirrors.sjtug.sjtu.edu.cn/rust-static"
rustup target add x86_64-linux-android

检测当前编译链

#当前rust的交叉编译
rustup target list --installed# output
x86_64-linux-android
x86_64-pc-windows-msvc
# Android version
adb shell getprop ro.build.version.release# output
15#Android API LEVEL
adb shell getprop ro.build.version.sdk35

应该使用x86_64-linux-android35-clang的版本进行交叉

如何配置config.toml文件


# 对 ARM 64 位 (aarch64) Android 设备的配置[target.aarch64-linux-android]# 链接器路径修改为 aarch64 对应的文件
# 注意:你需要根据你的 NDK 版本和实际文件名称来调整路径
linker = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\aarch64-linux-android35-clang.cmd"# C 编译器(如果需要)
# cc = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\aarch64-linux-android35-clang.cmd"rustflags = ["-C", "link-arg=-target","-C", "link-arg=aarch64-unknown-linux-android35" # 目标也改为 aarch64
][target.x86_64-linux-android]# 链接器 (Linker) 的完整路径
# 注意:Windows NDK 工具链中的 clang 通常是一个 .cmd 或 .exe 文件。
# 我们使用 .cmd 文件,如果不行,请尝试使用 x86_64-linux-android-clang.exe
linker = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\x86_64-linux-android35-clang.cmd"# C 编译器 (CC) 的完整路径 (Rust 在编译 C/C++ 依赖时可能需要)
# cc = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\x86_64-linux-android35-clang.cmd"# 可选:指定 Android API 级别。35 是你路径中包含的版本
rustflags = ["-C", "link-arg=-target","-C", "link-arg=x86_64-unknown-linux-android35"
]

进行交叉编译的参数

#默认是debug 否则需要 ... build --release ...
cargo build --target x86_64-linux-android

FlameGprah.svg生成和导出的步骤

adb shell
cd /data/local/tmp/rust_dir#采集perf.data 保留符号 采集的名字叫做 perf.data 采集时间5s 对./cross_rust 可执行文件采集
simpleperf record -g -o /data/local/tmp/rust_dir/perf.data --duration 5 ./cross_rust#拉出来文件
adb pull /data/local/tmp/rust_dir/perf.data .```sh
adb shell
cd /data/local/tmp/rust_dir#拉出来文件
adb pull /data/local/tmp/rust_dir/perf.data .# 调用 ndk的simpleperf Python脚本
# -i 输入数据文件 -symfs 符号文件系统(Symbol File System) 用于解析地址到函数名
# --symfs 二进制文件所在目录
# FlameGraph的 stackcollapse-perf 脚本 读取调用栈数据,将相同的调用栈序列折叠
# 读取折叠后的堆栈信息和计数,生成SVG
# 导出svg
python F:\Android\Sdk\ndk\29.0.14206865\simpleperf\report_sample.py -i perf.data --symfs D:\code\doc_for_harmony_project\filament\rust_test\target\x86_64-linux-android\debug | perl D:\code\FlameGraph\stackcollapse-perf.pl | perl D:\code\FlameGraph\flamegraph.pl > test_root.svg

cross_rust的rs文件和对crross_rust的调用链的解释

cross_rust.rs

级别 函数/方法 结构体/模块 职责描述
Level 0 main() main.rs 程序的起点,负责协调整个流程。
Level 1 Graph::new() Graph 初始化图结构体及其所有内部数组和向量。
Level 1 Graph::build_with_sample_data() Graph 构建图:定义节点数,并读取内置的边数据。
Level 2 Graph::add_edge() (多次) Graph 根据边数据,向图的邻接表中添加边(双向)。
Level 1 Graph::prim() Graph 执行 Prim 算法:寻找最小生成树的核心逻辑。
Level 2 BinaryHeap::new() std::collections 初始化优先队列。
Level 2 BinaryHeap::push() std::collections 将起始节点推入优先队列。
Level 2 BinaryHeap::pop() (循环内) std::collections 取出权值最小的边。
Level 2 self.tt.push() (条件满足时) Graph 将找到的 MST 边记录到结果集合中。
Level 1 Graph::print_mst_edges() (条件满足时) Graph 输出结果:格式化打印 MST 的所有边。

相关新闻

  • 如何快速启动PyTorch项目?用PyTorch-CUDA-v2.7镜像就对了
  • 实时渲染如何破局?解锁高效、稳定、安全的云端可视化未来
  • 2025年年终卖得好的学习机品牌推荐:全维度横评从AI能力到内容生态,附10款市场实证型号清单 - 品牌推荐

最新新闻

  • 终极指南:在Linux系统上解锁Realtek RTL8125 2.5GbE网卡完整性能
  • DeepSeek V4 Flash:企业级大模型推理的低延迟高吞吐实践指南
  • 舟山市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 深圳办理营业性演出许可证报批代办服务商推荐 - 速递信息
  • 寻找洁净室工程定制生产制造商电话?欣锐臻净化 - mypinpai
  • Playwright录制器浮层按钮:浏览器扩展与Shadow DOM的魔法实现

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号