ubuntu交叉编译(armv7_32位)onnx源码_cpu版本

news2025/1/11 16:54:31

1 下载onnx

git clone  https://github.com/microsoft/onnxruntime
cd onnxruntime
git submodule update --init --recursive

2 编译

由于是交叉编译,所以需要设置一下编译工具,在网上搜索看到了这个

chineseocr_lite/build-onnxruntime-android.sh at onnx · DayBreak-u/chineseocr_lite · GitHub

于是 我用下面的命令进行编译 

./build.sh --skip_tests --config Release --build_shared_lib --cmake_extra_defines CMAKE_C_COMPILER=arm-ca9-linux-gnueabihf-gcc CMAKE_CXX_COMPILER=arm-ca9-linux-gnueabihf-g++  --parallel 10

这里就不用写-DCMAKE_C_COMPILER=arm-ca9-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-ca9-linux-gnueabihf-g++了,直接写CMAKE_C_COMPILER=arm-ca9-linux-gnueabihf-gcc CMAKE_CXX_COMPILER=arm-ca9-linux-gnueabihf-g++即可。

然后编译提示下面的错误,

我某搜索引擎搜了一下这个报错

/bin/sh: 1: ../protobuf/cmake/protoc-3.11.3.0: Exec format error

得到如下答案,

 然后点击链接去了https://github.com/ucb-bar/onnxruntime-riscv/issues/7

可以看到

然后继续去链接 onnxruntime-riscv/build.sh at 34dbafc75241cc86c813fc679a55355d7863fd99 · ucb-bar/onnxruntime-riscv · GitHub

然后我用了他的build.sh,把其中的交叉编译工具链修改了一下,修改后的如下 

​
#!/bin/bash
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

# Get directory this script is in
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Setup RISCV environment variables. Ensure that riscv/esp-tools GCC is in your path.
export CXX=arm-ca9-linux-gnueabihf-g++
export CC=arm-ca9-linux-gnueabihf-gcc
#export CXXFLAGS="-march=rv64imafdc "

# Download protoc if we don't have it
if [ ! -d "build/protoc" ]; then
	mkdir -p "build/protoc"
	curl --location "https://github.com/protocolbuffers/protobuf/releases/download/v3.11.3/protoc-3.11.3-linux-x86_64.zip" --output "build/protoc/protoc.zip"
	cd build/protoc
	unzip protoc.zip
fi

cd $DIR

# NOTE: If you're NOT building for the first time adding "--parallel" when invoking this script will parallelize build
# requires python3.6 or higher
python3 $DIR/tools/ci_build/build.py --arm --skip_tests --config Release --build_shared_lib  --disable_contrib_ops --build_dir=build "$@"

# On first build, it might fail on linking binary, complaining about missing atomics (this is despite having -latomic).
# Rebuilding fixes this for some reason. This started happening after the version bump subsequent to commit 4db932, as there were some CMake file changes in those commits.

if [ -d "build/Debug" ]; then
	cd build/Debug
	# /scratch/pranavprakash/chipyard/esp-tools-install/bin/riscv64-unknown-linux-gnu-g++  -march=rv64imafdc -mabi=lp64d -Wno-error=attributes -Dgsl_CONFIG_CONTRACT_VIOLATION_THROWS -Wall -Wextra -ffunction-sections -fdata-sections -Werror -Wno-parentheses -g -Wno-nonnull-compare -Wno-deprecated-copy  -latomic -static CMakeFiles/onnx_test_runner.dir/scratch/pranavprakash/onnxruntime/onnxruntime/onnxruntime/test/onnx/main.cc.o  -o onnx_test_runner  libonnx_test_runner_common.a libonnxruntime_test_utils.a libonnxruntime_session.a libonnxruntime_providers_systolic.a libonnxruntime_optimizer.a libonnxruntime_providers.a libonnxruntime_util.a libonnxruntime_framework.a libonnxruntime_util.a libonnxruntime_graph.a libonnxruntime_common.a libonnxruntime_mlas.a libonnx_test_data_proto.a external/re2/libre2.a onnx/libonnx.a onnx/libonnx_proto.a external/protobuf/cmake/libprotobuf-lited.a external/re2/libre2.a external/nsync/libnsync_cpp.a -ldl -Wl,--whole-archive -lpthread -latomic -lrt -Wl,--no-whole-archive
else
	# If we're release build don't bother linking the test runner binaries
	cd build/Release
fi

​

然后我再次编译发现还是报同样的错误,然后我又去搜了几个其他的方法也都不行,然后我又回头看了看这个解决方法,为什么别人用这种方法能解决呢,我又停下来思考了下,我猜测报错的原因看着像是电脑需要的是x86的proto,而我的./build/Release/external/protobuf/cmake/protoc-3.11.3.0用file命令可以看到是arm32格式的,而上面的解决方法其实就像在build.sh里面增加了一个下载x86格式的proto的操作,只不过这个下载proto是放在了build/protoc/bin/protoc里面,于是我

cp ./build/protoc/bin/protoc ./build/Release/external/protobuf/cmake/

我把这个下载x86的proto放到了./build/Release/external/protobuf/cmake/protoc-3.11.3.0同一个目录里面,再次编译,编译成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter(一):jmeter概述与工作原理,安装与基本配置介绍

Jmeter(1):jmeter概述与工作原理 jmeter概述与工作原理 JMeter 是 Apache 基金会 Jakarta 上的一个纯 Java 开源项目,起初用于基 于 Web 的压力测试(pressure test),后来其应用范围逐渐扩展到对文件传输 FTP, 大型数据…

基于JavaWeb+JSP的校园二手交易平台(源码+数据库+说明文档)

目录 一、前后端功能模块 1.用户web前端页面功能模块 2.后台信息管理模块 二、开发环境 三、开发技术 四、页面设计 1.登录注册界面 2.网页主页界面 3.商品列表界面 4.商品详情界面 5.支付页面 6.支付成功后页面 7.我的订单页面 ​8.个人已发布与待处理订单界面…

google外链重要性高吗?谷歌外链作用大不大

google外链重要性高吗? 答案是:非常重要,而且要注重建设付费GPB外链。 要相信有价值的外链一般都比较难获取,那种高流量的外链一般要靠自己去outreach, 但是成功率比较低,我们需要用金钱和优质外链资源去交换 做高质…

程序员的浪费,Python一对一还原《点燃我,温暖你》里面比较火的那个爱心代码 | 附源码

前言 包子们,上午好 最近有个剧挺火的 就是那个程序员的剧,叫《点燃我,温暖你》 最近听说很火呀,那作为程序员,Python中的战斗机的小编,能不给大家安排一波! 怎么说呢,用这个表白也…

我凭借这 1000 道 java 真题,顺利拿下京东、饿了么、阿里大厂 offer

今天这篇文章也算是一次面试总结了吧! 毕竟金九银十过去了,总得给大家来点东西交代交代! 所以今天,这篇文章就应运而生了,给大家来点正正经经的干货教学,让大家体验一下干货的魅力! 小编今天这里…

【C语言数据结构(基础篇)】第一站:时间复杂度与空间复杂度

目录 一、什么是时间复杂度和空间复杂度 1.算法效率 2.时间复杂度的概念 3.空间复杂度的概念 二、如何计算常见的时间复杂度 1.大O的渐进表示法 2.一些时间复杂度的例子 (1)例1 (2)例2 (3)例3 (4)例4 (5&a…

【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)

觉得有帮助麻烦点赞关注收藏~~~ 一、多任务网络的主要分类 目前建立的多任务网络可以分为两种方法,一种为并联多任务网络结构,另一种为级联多任务网络结构,两种网络构建方式分别如下图所示 并联式 级联式 并联网络结构大多为共享基础网络而…

ADI Blackfin DSP处理器-BF533的开发详解14:LED跑马灯(含源代码)

接口讲完了,下面写点应用程序,GPIO最典型的应用,LED跑马灯。 硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 *硬件实现原理 ADSP-EDU-BF533开发板上共设计了…

2005-2020年全国31省劳动力市场分割指数

2005-2020年全国31省劳动力市场分割指数 1、时间:2005-2020年 2、范围:包括全国31省, 3、数据内容:数据存在缺失,下载链接界面有数据预览,具体缺失情况参看链接内数据预览, 内含原始数据、A…

把废旧监控改无人机遥控车红外远程摄像头

像我们这些精打细算的业余玩家,淘个新宝贝都要掂量掂量。很羡慕能买到专用红外摄像头配无人机。可是手头不宽裕,只有一些旧零件。这都是废物再利用,所以说不要太追求性能了,自然让他工作就好,测试这条路线的可行性。 …

blneder 蜡笔

文章目录简介.打开蜡笔.基本操作.自由线.图形工具.图层.遮罩.画布.画布原点.![在这里插入图片描述](https://img-blog.csdnimg.cn/46cb7019e8ff41e6b391e056c616ce32.png)画布旋转.辅助.圆形.径向.平行.栅格.等距.编辑模式.顶部工具栏.选择.曲线编辑.左侧工具栏.快捷键.画笔深度…

值得一看的Linux内核—中断下半部之软中断

软中断 软中断(softirq)是中断处理程序在开启中断的情况下执行的部分,可以被硬中断抢占。 内核定义了一张软中断向量表,每种软中断有一个唯一的编号,对应一个softirq_action实例,softirq_action实例的成员…

b站黑马JavaScript的Node.js案例代码——考试成绩整理案例

目录 目标效果: 重点原理: 1.js中split方法——转换字符串为数组 2.js中forEach方法——遍历数组中每个对象 3.js数组操作中push方法——添加1/多个元素去数组的末尾 4.js数组操作中replace方法——在字符串中用一些字符替换另一些字符 5.js数组操…

ATtiny13与Proteus仿真-8位通用定时器/计数器与PWM仿真

8位通用定时器/计数器与PWM 1、8位通用定时器介绍 ATtiny13的8位通用定时器/计数器有两个独立的输出比较单元,并支持PWM。这意味着,可以通过8位通用定时器/计数器生产PWM信号。关于PWM的介绍,在这里就展开介绍,请参考相关资料。 ATtiny13的8位通用定时器/计数器具有如下…

备战一年,终于斩获腾讯T3,老子一定有美好的未来...

我就是那个从25岁躺平,30岁开始醒悟的“中年秃头大叔”,这人一到了中年,思考问题的方向确实不一样了。以前我不想结婚不想养育后代,天天公司摸鱼,总觉得自己赚钱自己花就挺好,25岁赚一万,30岁还…

[ 数据结构 ] 排序算法--------七大内排,看完还不会写来揍我

0 前言 1.1 排序分类 内部排序和外部排序,前者数据加载到内存,后者数据量大需借助外部文件. 内部排序包含: 插入排序:直接插入排序,希尔排序 选择排序:简单选择排序,堆排序 交换排序:冒泡排序,快速排序 归并排序 基数排序 1.2 复杂度 1)度量一个程序时间有两种方法,事后统…

tp3.2实现websocket

首先从单服务器实现开始 我的系统是centos系统,lnmp搭建的环境,php5.6 1:首先检查环境是否支持 curl -Ss http://www.workerman.net/check.php | php PHP Version > 5.3.3 [OK] Extension pcntl check [OK] Extension posix check [OK] 2.…

Metal每日分享,均值模糊滤镜效果

本案例的目的是理解如何用Metal实现均值模糊效果滤镜,均值模糊原理其实很简单通过多个纹理叠加,每个纹理偏移量设置不同达到一点重影效果来实现模糊; Demo HarbethDemo地址 实操代码 // 均值模糊效果滤镜 let filter C7MeanBlur.init(radius: 0.5)//…

清除浏览器缓存

清除浏览器的缓存知识调用前言引入具体操作知识调用 文章中可能用到的知识点前端学习:浏览器缓存方式有哪些(http协议 websql indexDB cookie localstorage sessionstorage)如何查看Chrome浏览器的页面缓存内容【详细教程】 前言引入 上期文…

基于汇编的.NET高级调试

一:背景 1. 简介 .NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多还是用微软的 MASM + DosBox 搭一个 8086 的环境,这玩意距今快 50 年了。 在…