apache arm 交叉编译_MacOS 下交叉编译的折腾笔记

这是这个系列 “折腾笔记” 的第一篇,希望能用更直白的方式去展现交叉编译的时候做了些什么。因此,这个教程并不是最佳实践,但是可以让小伙伴们有一个更直白的理解。之后,我会把笔记的重点放在 bazel 上交叉编译的最佳实践,并配一些小的实践案例,如交叉编译能在树莓派上运行的含有深度学习模型的小程序。

PS:个人平时用的电脑的系统是 MacOS,值得一提的是 MacOS 不等于 Linux。它的交叉编译其实有很多坑,比如 tensorflowlite 中提供的交叉编译的工具或 Linaro 只能在 Linux 下通过。因此,个人建议 MacOS 下的交叉编译方式为采用 docker 运行 Linux 系统然后进行交叉编译。

关于交叉编译的小理解与实践思路

交叉编译其实就是使用能够把代码源码转换为目标平台机器语言的编译器。比如,树莓派的就需要的是不是 x86 的 gcc 而是支持 arm 处理器的 arm-linux-gnueabihf-gcc。那么是不是我们把相关的依赖环境搞过来就可以编译了呢?我个人认为是的,于是进行一番调研,还真的发现了一个想法相似的教程。这个方法的核心就是把树莓派上的环境拷过来,然后使用 llvm 结合 arm-linux-gnueabihf-binutils 进行交叉编译。

实践步骤

使用 brew 安装一些依赖项

brew install arm-linux-gnueabihf-binutils llvm rsync 
# brew 的管网安装脚本如下 、
# /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

从树莓派上拷过来相关的 gcc 和其相关环境

rsync -rzLR --safe-links pi@raspberrypi:/usr/lib/arm-linux-gnueabihf pi@raspberrypi:/usr/lib/gcc/arm-linux-gnueabihf pi@raspberrypi:/usr/include pi@raspberrypi:/lib/arm-linux-gnueabihf sysroot/
# 这里面的 pi 是树莓派的 ip 或者 ssh 别名。
# raspberrypi 是树莓派中的用户名
# 如,gpu@deamov 代表着 ssh 的别名为 gpu,deamov 是我的用户

检查下当前的目录

.
├── hello_cross_compile.cc
└── sysroot # 这个就是我们刚才用 rsync 传过来的根目录├── lib└── usr

hello_cross_comile.cc 的内容如下

#include <iostream>using namespace std;int main(int argc, char *argv[]) {cout << "Hello ResPi compiled by MacOS" << endl;return 0;
}

使用 llvm 进行交叉编译

执行如下命令 (扔到一个 .sh 文件里),即可生成可以在树莓派下执行的文件 hello 。之后拷到树莓派上就可以成功执行了。

HOME=`pwd` # 设置 $HOME 为当前目录
`brew --prefix llvm`/bin/clang++ --target=arm-linux-gnueabihf --sysroot $HOME/sysroot -isysroot=$HOME/sysroot -isystem $HOME/sysroot/usr/include/c++/8 -isystem $HOME/sysroot/usr/include/arm-linux-gnueabihf/c++/8 -L$HOME/sysroot/usr/lib/gcc/arm-linux-gnueabihf/8 -Wl,--rpath-link $HOME/sysroot/lib/arm-linux-gnueabihf -B$HOME/sysroot/usr/lib/gcc/arm-linux-gnueabihf/8 --gcc-toolchain=`brew --prefix arm-linux-gnueabihf-binutils` -o hello ./hello_cross_compile.cc -v

推荐阅读

https://embed-linux-tutorial.readthedocs.io/zh_CN/latest/linux_app/arm_gcc_hello_world.html​embed-linux-tutorial.readthedocs.io
68e234cfe434bf431be5ad175cf52bfb.png
4. ARM-GCC和开发板的HelloWorld - [野火]i.MX Linux开发实战指南 文档4. ARM-GCC和开发板的HelloWorld - [野火]i.MX Linux开发实战指南 文档​embed-linux-tutorial.readthedocs.io
68e234cfe434bf431be5ad175cf52bfb.png

一个非常完整且详细的交叉编译指南,虽然不支持 MacOS,但是我们可以通过开一个 Linux 的 docker 来解决问题。

Documentation​crosstool-ng.github.io

Crosstool-ng 是目前原生在 MacOS 下确认可支持的交叉编译方案,但是需要你去在硬盘上开空间操作复杂。有把主系统搞崩的风险。

Docker-nano/crosstool-NG​github.com
b35260842601f9bced8692a16a625dfd.png

如果你铁了心要用 crosstool-ng,个人推荐可以看看这个别人写好的 Dockfile。但还是回到了原来的问题,如果你都起了 docker 了。ubuntu 或者其他 Linux 的镜像不香嘛。

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

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

相关文章

树-二叉树、满二叉树和完全二叉树

树-二叉树、满二叉树和完全二叉树 二叉树的定义&#xff1a; &#xff08;1&#xff09;当n0时&#xff0c;为空树&#xff1b; &#xff08;2&#xff09;当n>0时&#xff0c;是由一个根结点和称为根结点的左、右子树构成&#xff0c;并且两颗子树互不相交。 满二叉树&…

Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效

向大家分享一个来自 Codrops 的基于 CSS3 实现的全屏网页过渡特效。页面初始布局是四个盒子&#xff0c;点击其中一个会扩张到全屏&#xff0c;其它的会淡出隐藏&#xff1b;关闭当前视图的时候又恢复到初始状态。 您可能感兴趣的相关文章-prefix-free&#xff1a;帮你从 CSS 前…

经典案例:2012年最佳25个响应式网站设计作品《下篇》

2012年&#xff0c;响应式网站设计成为主流&#xff0c;这个概念由著名网页设计师 Ethan Marcotte 在2010年5月份提出&#xff0c;其目标是要让设计的网站能够响应用户的行为&#xff0c;根据不同终端设备自动调整尺寸。 响应式设计不再只是一个概念&#xff0c;众多大公司也把…

npm git 遇到的问题解决笔记

npm 报错 在无可奈何时可以试一试这个命令 npm cache clean --force commit 是如果报这样的错 删掉项目中.git/index.lock文件再commit即可解决问题 1.git config --global user.email xxx163.com 2.git config --global user.name xxx 3.ssh-keygen -t rsa -C xxx163.com(邮箱…

Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件

Docverter 让你无需建立自己的文档转换工具就能够进行文件转换。Docverter 包装了几个开源项目&#xff0c;使您的文档能够进行完美的转换。借助一个简单的 HTTP API &#xff0c;把使用 HTML&#xff0c;Markdown, 或者 LaTeX 编写的纯文本文件转换为 DOCX&#xff0c;PDF&…

MoreUnit与MoreUnit

就在一年多以前&#xff0c;我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit &#xff0c;以进一步提高测试效率。 尝试一下让我感到很高兴&#xff0c;并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外&#xff0c;在使用MoreUnit一段时间后&…

js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...

javascript下用ActiveXObject控件替换word书签&#xff0c;将内容导出到word后打印第2/2页更新时间&#xff1a;2008年06月21日 22:57:31 作者&#xff1a;由于时间比较紧&#xff0c;没多的时候去学习研究上述工具包&#xff0c;现在用javascript操作ActiveXObject控件&…

平时二十三测

昨日AK&#xff0c; 今日垫底&#xff0c; 我简直是在坐过山车&#xff1b; 以后记住有返回值的函数一定要写返回值&#xff0c;不然全部输出0 题解: 第一题&#xff1a;全是-1&#xff0c; 是2^(n-1)-1,不会证&#xff0c;样例很明显&#xff1b; 对于有X个跟班的人&#xff0…

20181103_C#线程初探, BeginInvoke_EndInvoke

在C#中学习多线程之前, 必须要深刻的理解委托; 基本上所有的多线程都在靠委托来完成 一. 进程和线程: a) 进程和线程都是计算机的概念, 跟程序语言没有任何关系 b) 进程和线程都属于计算机操作系统自身控制和调度, 程序语言只有使用的份, 最终的控制权还是得操作系统说了算, …

【完成发布】Lazy Line Painter – 非常有趣的 jQuery 路径动画插件

Lazy Line Painter 是基于 Raphal&#xff08;一个用于在网页中绘制矢量图形的 Javascript 库&#xff09;的 jQuery 路径动画插件&#xff0c;能够把线条图案转换为吸引眼球的路径动画模式。 您可能感兴趣的相关文章 60款非常酷的 jQuery 幻灯片演示和下载15个款优秀的 jQuer…

python构建矩阵 x y_生成Python函数一半没问题,当前最正统的代码生成是什么样的?...

机器之心原创参与&#xff1a;思源大家都说深度神经网络能力很强&#xff0c;那么从函数注释生成函数代码&#xff0c;以及从函数代码总结函数注释这种最基础的代码任务到底能不能行&#xff1f;像 Python、Java 这样的通用高级语言&#xff0c;到底在代码生成上能达到什么水平…

福大软工 · 第七次作业 - 需求分析报告(404 Note Found队)

目录 组队后的团队项目的整体计划安排项目logo及思维导图项目logo思维导图产品思维导图产品思维导图-引导产品思维导图-后端数据处理、存储产品思维导图-短信识别产品思维导图-智能分析产品思维导图-壁纸生成产品思维导图-注册界面产品思维导图-登录界面产品思维导图-使用1产品…

Web设计前沿:CSS3 在网页设计中的20个惊艳应用

作为 CSS 的下一个版本&#xff0c;CSS3 给 Web 开发带来了革命性的影响。例如&#xff0c;以前很多需要图片呈现的界面效果&#xff0c;现在使用 CSS3 结合 HTML 就可以实现&#xff0c;CSS3 甚至还可以实现需要 JavaScript 才能实现的复杂动画效果。下面向大家展示 CSS3 圆角…

Websockets与Spring 4

我将整个厨盆放入一个小型Web应用程序中&#xff0c;此应用程序是我在该帖子中开发的一部分-Spring Boot&#xff0c;Spring Integration&#xff0c;RabbitMQ&#xff0c;最后是该帖子的主题&#xff0c;Spring MVC与Spring 4中的Websocket支持。 实时地震清单应用 最终的应用…

计算机算力英语怎么说,MIT警告深度学习正逼近算力极限,突破瓶颈会让人类成为上帝?...

原标题&#xff1a;MIT警告深度学习正逼近算力极限&#xff0c;突破瓶颈会让人类成为上帝&#xff1f;摩尔定律提出的时候&#xff0c;人们从来没有想到过芯片的算力会有到达极限的一天&#xff0c;至少从来没有想到芯片算力极限会这么快到来。MIT发出警告&#xff1a;算力将探…

推荐40个简单的 jQuery 导航插件和教程【下篇】

在这篇文章中&#xff0c;我为大家收集了40款非常棒的 jQuery 导航插件和教程。导航作为网站重要的组成部分&#xff0c;能够帮助用户找到他们想要的内容&#xff0c;因此导航设计的好坏决定了用户能够在你的网站停留更长的时间&#xff0c;浏览更多的内容。在下面的集合中&…

福大软工 · 第七次作业 - 需求分析报告

【 组长博客链接】 031602428 苏路明 【计划安排】 阶段主要任务时间任务内容1项目选题09.22 - 10.10确定选题内容&#xff0c;收集用户需求&#xff0c;明确定位&#xff0c;竞品分析&#xff0c;选题报告2需求分析10.11 - 11.4梳理需求&#xff0c;输出思维导图&#xff0c;原…

网站页面左右_广州网站优化的技巧是什么?

说到网站优化&#xff0c;大家都不陌生&#xff0c;但首先&#xff0c;我们知道为什么要优化网站吗?我们网站优化是为了改善网站在百度&#xff0c;搜狗等搜索引擎搜索结果排名中的网站页面&#xff0c;以增强搜索引擎的流量。下面拓王朝广州网站优化公司小编针对网站的优化技…

python: 爬取[博海拾贝]图片脚本

练手代码&#xff0c;聊作备忘&#xff1a; # encoding: utf-8 # from __future__ import unicode_literalsimport urllib import urllib2 import re import os import time from threading import Threadclass BhsbSpider(object):_url rhttps://bh.sb/post/category/main/;_…

Java八岁生日快乐!

这是另外一段漫长的旅程&#xff0c;但是昨天&#xff0c;恰好是Java 7发布两年零七个月零十八天之后&#xff0c;我们现在有了可用于生产的构建 Java 8可供下载 &#xff01; 这个新的主要版本包含一些新功能和增强功能&#xff0c;这些功能和增强功能可以提高现有应用程序的…