交叉编译及树莓派(或其他平台)交叉编译工具链的安装

交叉编译是什么:
交叉编译是一个行为,是在一个平台上生成另一个平台上的可执行代码。
比如:我们在windows上面编写C51的代码,并编译成可执行代码,如xx.hex,是在C51上面运行不是在windows上面运行。

同样:我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如xx.out,是在树莓派上面运行不是在linux上面运行。

编译:是在一个平台上生成在该平台上的可执行的代码。
C51 交叉编译的发生在kill(集成环境上面)
为什么要交叉编译:
平台上不允许或不能够安装我们所需要的编译器,比如C51,而树莓派可以。
1、目的平台上的资源贫乏,无法运行我们所需要编译器
2、既然树莓派能够安装我们所需要的编译器,是不是不需要交叉编译?
其实也要
因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也需要编译。
平台运行至少需要两样东西:bootloader(后动引导代码)以及操作系统核心。
宿主机(host):编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
交叉编译需要用到的工具:
交叉编译器,交叉编译工具链

交叉编译相关内容详细介绍:https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/10916911?fr=aladdin

交叉编译工具链的安装:
1、临时有效
PATH环境变量(将命令加入终端,使命令使用更加方便,不用敲很长的路径)

1、从共享文件夹拷贝到工作目录

cp /mnt/hgfs/sharefromwindows/tools-master.zip .

2、解压

unzip tools-master.zip

3、找到工具路径

 cd tools-master/lscd arm-bcm2708lscd gcc-linaro-arm-linux-gnueabihf-raspbian-x64lscd binls./arm-linux-gnueabihf-gcc -vecho $PATH// 显示当下的环境变量pwd//显示当前文件夹下的路径export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
(export是配置环境变量的意思)
注意:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:是从echo中复制的
/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin是pwd指令生成的所想要省略的文件路径

4、然后回到工作目录下

 arm-linux-gnueabihf-gcc -v//查看是否完成,出现gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)表示完成

2、永久有效
修改工作目录下的.bashrc (隐藏文件),用来配置命令终端的

 vi /home/CLC/.bashrc方法:将配置环境变量的代码粘贴到文件最后,就是export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin这样每次启动终端就会运行这个指令。source /home/CLC/.bashrc//加载配置文件,马上生效配置。

交叉编译工具链压缩包:
链接:https://pan.baidu.com/s/1ApdowTcTe4vchY_0qci5qA
提取码:9vci

这篇博文更加详细:https://blog.csdn.net/weixin_45309916/article/details/107789879

交叉编译如何执行:

gcc test.c -o test_1
file test_1
//file  用来查看文件属性
test_1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xcfc35e8f92f7737433ebe182ff90ac60a2f058c7, not stripped
//executable 表示可执行文件
//只能运行在X86-64位的电脑上arm-linux-gnueabihf-gcc test.c -o test_2
//交叉编译,将test.c编译成树莓派可执行的代码
file test_2
//查看文件属性
test_2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xb6ef18cf7462c1c0d7f4b8e455972204ae718324, not stripped./test_2
//在ubuntu上运行编译的树莓派的代码
bash: ./test_2: cannot execute binary file
//报错:不能解析这个文件scp test_2 pi@192.168.0.118:/home/pi
//将这个编译好的程序复制到树莓派的/home/pi中
//格式是:scp 程序名 开发板的用户名@树莓派IP地址:开发板的绝对路径

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

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

相关文章

Delphi:ADOConnection连接SQLServer自动断网问题解决

解决方法一:异常时关闭连接,WinXP,win7 32位大部分情况都是起作用的,不过在有些windows操作系统下(如家庭版)不起作用,不知为何? try //执行sql操作 except AdoConnection.close;//…

走近北京后厂村程序员的真实生活

来源:中新经纬北京的西北角是个特别的区域,这里汇集了众多互联网及IT企业,实力雄厚的上市公司将自家 logo 悬挂在大厦的顶端,而刚起步的创业公司也会选择在这里租下一亩三分地。中关村、上地、西二旗、后厂村……它们成为了一个个…

带wiringPi库的交叉编译

WiringPi的下载——网盘提取 链接:https://pan.baidu.com/s/1cPIt-xZLye1DAQjq2yKzeg 提取码:35vt (这个库不是很好,链接的库的格式不对,是宿主机的平台,需要自己将树莓派的wiringpi库(libwiri…

lintcode:最小编辑距离

最小编辑距离 给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。 你总共三种操作方法: 插入一个字符删除一个字符替换一个字符样例 给出 work1"mart" 和 work2"karma" 返回 3 解题 动态规划解题 定义矩阵dp[][]…

这些代码优化的方法,你都用过吗?

来自:www.cnblogs.com/xrq730/代码优化的最重要的作用应该是:避免未知的错误在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是一个非常小的原因。然…

VMwareTool 安装

VMwareTools的一些实用性 安装后用户可以从物理主机直接往虚拟机里面拖文件。 安装后鼠标进入虚拟机后可以直接出来,不安装的话要按CTRLALT才可以释放鼠标。 安装后可以解决Ubuntu主窗口分辨率不适应问题,用户可以随意改变虚拟机窗口大小,vm…

Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio

转载于:https://www.cnblogs.com/hanhuilee/p/5221255.html

Ubuntu18.04的vim和ifconfig的安装

安装vim : 命令行中输入:sudo apt-get install vim (ps:它会显示让你输入密码,不过你输入的密码不会回显) 查看安装是否成功输入: vim -v 若出现以下情况: The following packages have unmet dependencies: vim : …

Http与WWW服务精解

TCP/IP 协议介绍在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容。TCP/IP协议是分层的,从底层至应用层分别为:物理层、链路层、网络层、传输层和应用层,如下图所示:从应用层至物理层,数据是一层层封…

嵌入式设备带操作系统的启动过程

树莓派等芯片带操作系统的启动过程 C51,STM32(裸机)--------》c直接操控底层寄存器,实现相关业务。 x86 , Intel等架构跑的是windows操作系统。 启动过程:电源 -》BIOS-》windows内核-》C盘,D盘-》程序启动&#xff…

C#笔记

#region Using directives ... #endregion :表示中间的语句可以折叠 Console.WriteLine(); 类似于C语言中的输入语句 ,不过此处还须加入Console.ReadKey(); Console.WriteLine("{0} {1}.",myString,myInteger); 字符串中的每对花括号表示一个占位符&#…

微软宣布下一代集成开发环境 — Visual Studio 2019

来自:开源中国链接:https://www.oschina.net/news/96817/microsoft-announces-visual-studio-2019在今天的一篇名为 Whats Next for Visual Studio 的博客文章中,微软宣布了它下一个版本的集成开发环境 —— Visual Studio 2019。不过&#x…

史上最通俗的集线器、交换机、路由器功能原理入门

1、前言本文旨在简单地说明集线器、交换机与路由器的区别,因而忽略了很多细节,三者实际的发展过程和工作原理并非文中所写的这么简单。如果你看完本文能大概了解到三者的异同,本文的目的就达到了。2、帝国时代我相信我们都玩过一款特别火的游…

泛型(Generic)

为什么要有泛型? 1.解决元素存储的安全性问题 2.解决获取数据元素时,需要类型强转的问题 服用前: 服用后: 泛型,JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表…

官宣!DevExpress Blazor UI组件,支持全新的.NET 8渲染模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 .NET 8为Blazor引入了令人兴奋的重…

linux内核源码树

linux内核源码树扫盲分析 sudo apt-get install tree //下载tree tree //输入指令(该指令可以检查第三方工具包里的内容是否完整)可以看到如图的树状结构: linux内核源码: 为什么内核大约1.3w个c文件,1100w行代码? linux是一个开…

POJ 2676/2918 数独(dfs)

思路&#xff1a;记录每行每列每一个宫已经出现的数字就可以。数据比較弱 另外POJ 3074 3076 必须用剪枝策略。但实现较麻烦&#xff0c;还是以后学了DLX再来做吧 //Accepted 160K 0MS #include<cstdio> #include<iostream> #include<algorithm> #include&l…

负载均衡很难?看完这篇全懂了

来自&#xff1a;金钟路上小码工链接&#xff1a;https://www.cnblogs.com/danbing/p/7459224.html一、什么是负载均衡&#xff1f;互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#…

配置树莓派linux的内核和编译并将镜像拷贝至树莓派

驱动代码的编写需要一个提前编译好的内核&#xff0c;编译内核就必须配置&#xff0c;配置的最终目标会生成.config文件&#xff0c;该文件指导makefile去把有用的东西组织成内核。 如何生成.config文件&#xff1a; 第一种方式&#xff1a; 厂家配linux内核源码&#xff0c;比…

h5 与原生 app 交互的原理

作者&#xff1a;senntyousegmentfault.com/a/1190000016759517现在移动端 web 应用&#xff0c;很多时候都需要与原生 app 进行交互、沟通&#xff08;运行在 webview中&#xff09;&#xff0c;比如微信的 jssdk&#xff0c;通过 window.wx 对象调用一些原生 app 的功能。所以…