【KAWAKO】MNN-将推理程序交叉编译成RK1126的可执行文件

得到RK交叉编译器
主要用到这两个,一个gcc的,一个g++的。

这个交叉编译器请自行下载
将交叉编译器添加进path
在 /usr/local 路径下随便创建个 arm 文件夹,然后把整个交叉编译器的文件夹全扔进去

编辑 /etc/bash.bashrc
vi /etc/bash.bashrc
在末尾加上
export PATH=$PATH:/usr/local/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin
export PATH
最后使用这个命令激活一下(不知道能不能称为激活)
source /etc/bash.bashrc
用gcc的交叉编译器试一下,获得下图一样的输出,则没有问题

对MNN进行交叉编译
进入MNN根目录,关于交叉编译的文件在这个路径下

首先回去看一下我们的交叉编译器的名字,叫arm-linux-gnueabihf-gcc、arm-linux-gnueabihf-g++。记住我们用的是arm框架的gnueabihf。
打开上述交叉编译路径下的build.sh文件。在namlelist中找到gnueabihf,在下面的代码中找到对应的部分,后面如果嫌交叉编译慢的话可以像下图中第35行一样,将make改为make j8,相当于使用8个线程(好像是)。

打开上述交叉编译路径下的arm.toolchain.cmake文件,找到对应的arm-gnueabihf,将下面的 CMAKE_C_COMPILER 和 CMAKE_CXX_COMPILER 对应的编译器名字改为本文一开始截图中的那两个。

回到MNN根目录,使用下面的指令对MNN进行交叉编译
./project/cross-compile/build.sh
编译完成后MNN根目录下会出现build-arm-gnueabihf文件夹,我们只需要使用里面的 libMNN.so 和 express/libMNN_Express.so 两个动态库文件。
对自己的工程进行交叉编译
回到自己工程中的CMakeLists.txt,重新指定gcc和g++编译器,并且重新指定.so动态库的路径。
# set(CMAKE_C_COMPILER gcc)
# set(CMAKE_CXX_COMPILER g++)
# 指定RK交叉编译
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
# 指定动态库文件
target_link_libraries(segment ${MNN_DIR}/build-arm-gnueabihf/libMNN.so ${MNN_DIR}/build-arm-gnueabihf/express/libMNN_Express.so)
进入自己工程的build文件夹,重新编译工程
cmake ..
make

将编译好的可执行文件和.so动态库放入板子中运行
在板子中,将刚才编译出来的可执行文件和代码中用到的其他文件(音频文件、模型文件等)按照对应路径进行放置,然后把需要用到的.so动态库放入与可执行文件相同的路径下,运行可执行文件即可。亲测有效。
忘了截图保留运行结果,昨晚把板子还给同事了,这部分就不贴图了。
【KAWAKO】MNN-将推理程序交叉编译成RK1126的可执行文件的更多相关文章
- Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件
由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...
- QT程序打包成多平台可执行文件
一.简述 QT项目开发完成后,需要打包发布程序,在实际生产中不可能把源码发给别人,所以需要将源码打包正可执行文件或者安装程序. 二.设置应用图标 把 ico 文件放到源代码目录下,在QT项目中的'.p ...
- go语言在Windows系统下编译成linux系统可执行文件
package main import ( "fmt" "os" "os/exec" ) //filepath: 要编译的文件的路径 fun ...
- RTC定时开机闹钟
RTC是Real Time Clock的简称,它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是RTC仍然继续工作. HWCR (Hibernate Wakeup Contr ...
- CentOS6 上OpenWRT交叉编译
目的不是为了编译固件,而是为了一个是编译可执行文件,放倒op的路由器上跑,另一个目的是安装一些开源软件折腾下(例如ss-lib),需要打包成 .ipk 格式 路由设备信息 erya@ERYA:~$ c ...
- c/c++编译器配置(交叉编译重要参数)、交叉编译动态库与as配置、mk初步
gcc/g++/clang,相当于javac: 了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时,清楚的了解应该传递什么参数. clang: clang 是一个C.C++.Obj ...
- archlinux安装交叉编译工具链
1. 在/usr/local下新建文件夹:arm [guo@archlinux local]$sudo mkdir arm 2. 将交叉编译工具拷贝到arm文件夹中 [guo@archlinux ...
- 扩展: 简介pyinstaller: py文件压缩成exe文件
写在开始: 后缀 .py 的文件, 必须在装有python解释器, 和相对应的模块下才能运行. 对于装13来说,比较不方便. 如果人家电脑上也装上了python解释器, 说不好一眼就看穿了 自己写的 ...
- nodejs打包成桌面程序(exe)的进阶之路
nodejs打包成桌面程序(exe)的进阶之路 node js bat 前端 计划任务 前言:最近的研究,请大佬们细品 第一篇 - 任务计划程序篇 说真的研究到将nodejs打包成可执行的exe文件是 ...
- Python代码打包成exe可执行程序
首先,打包成exe可执行程序是针对windows平台来说的. 目前比较主流的打包工具就是pyinstaller. 参考:Using PyInstaller 首先安装pyinstaller: pip i ...
随机推荐
- Web Api出现500 Internal Server Error 错误
在测试环境一切正常,但是部署到了生产环境发现一直报错.查询网上的方法设置了权限等等.都没有解决 原来发现是数据库连接字符串的问题.只需要把数据库连接字符串修改正确即可!
- 使用repo上传代码
前言~ repo是一款安卓用于管理源码的工具,由python实现,基于git工具 本文介绍了repo的常用使用方式. 一,下载代码 1. repo init 初始化命令 此命令常用选项就那几个,此处取 ...
- Python: 你所不知道的星号 * 用法
以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/FHyosiG_tegF5NRUEs7UdA 本文大概 1193 个 ...
- JUC源码学习笔记6——ReentrantReadWriteLock
系列文章目录和关于我 阅读此文需要有AQS独占和AQS共享的源码功底,推荐阅读: 1.JUC源码学习笔记1--AQS独占模式和ReentrantLock 2.JUC源码学习笔记2--AQS共享和Sem ...
- 【Java EE】Day10 JavaScript高级、DOM、BOM、事件
一.简单入门 1.DOM 功能:获取html文档内容 代码:document.getElementById("id值") 功能: 设置属性值 修改标签体内容:xx.innerHtm ...
- Hexo博客搭建和简单部署
title: Hexo博客搭建和简单部署 date: 2020-03-02 12:00:00 categories: - [IT,博客] - [IT,软件,程序] - [IT,软件,搭建与配置] ta ...
- 简单易用的监控告警系统 | HertzBeat 在 Rainbond 上的使用分享
在现有的监控告警体系中 Prometheus + AlertManger + Grafana 一直是主流,但对于中小团队或个人来说,这种体系显的较为复杂.而 HertzBeat 能让中小团队或个人很快 ...
- 周而复始,往复循环,递归、尾递归算法与无限极层级结构的探究和使用(Golang1.18)
所有人都听过这样一个歌谣:从前有座山,山里有座庙,庙里有个和尚在讲故事:从前有座山....,虽然这个歌谣并没有一个递归边界条件跳出循环,但无疑地,这是递归算法最朴素的落地实现,本次我们使用Golang ...
- LFU 的设计与实现
LFU 的设计与实现 作者:Grey 原文地址: 博客园:LFU 的设计与实现 CSDN:LFU 的设计与实现 题目描述 LFU(least frequently used).即最不经常使用页置换算法 ...
- 【转载】EXCEL VBA 自动筛选—AutoFilter方法
AutoFilter方法的语法及说明 下面是Range对象的AutoFilter方法的语法: Range对象.AutoFilter(Field,Criterial1,Operator,C ...