当前位置:网站首页>交叉编译工具链的安装和配置过程
交叉编译工具链的安装和配置过程
2022-07-29 14:00:00 【luobeihai】
1. 编译工具链基本介绍
C/C++程序需要编译成二进制的机器码才能被CPU识别运行,而编译程序就需要用到编译器,比如我们常用的gcc编译器。
gcc编译器,其实只是编译工具链的其中一个工具而已,实际上整个编译工具链包含了:gcc(c编译器)、g++(c++编译器)、ar(ar打包工具,制作静态链接库)、as(汇编器)、ld(链接器)等等一系列的工具,所有的工具集合就被叫做交叉编译工具链。
对于嵌入式开发来说,因为我们运行代码的平台并不是电脑,而是其他架构的SoC,比如ARM架构的芯片。但是我们开发过程却是在电脑上开发,所以我们需要的事交叉编译工具链。比如下面的一些交叉编译工具:
这些工具都有前缀字段,他们有通用的命名规则:arch - vendor - os - abi ,其中:
arch:表示目标平台的CPU架构,比如上面写的就是ARM架构
vendor:这个单词指的是供应商。一般这个字段可以标识工具链由那个芯片厂商制作的,或者这个工具链可以编译哪颗厂商的CPU。这个字段基本都是不写(比如上面的截图)、或者写为none,这样就表示可以适用ARM架构的所有CPU。
os:这个字段表示目标平台运行的操作系统。常见的会写linux、none。一般来说none的工具链都是用于编译裸机程序的。写linux则编译的程序是运行与linux系统上,当然这个字段就算写着linux,也是可以编译裸机程序的。
abi:就是Application Binary Interface(应用程序二进制接口)英文的缩写。这个字段常见的有:abi、eabi、gnu、gnueabi、uclibc等等。其中gnu是指使用glic库,eabi是指Embedded Application Binary Interface(即嵌入式应用程序二进制接口)。
2. 获取交叉编译工具链
自己制作
交叉编译工具链,我们可以使用 crosstool-NG 这类工具,自己制作。
在一些机构或者开源组织下载
一般可以从这个网站上下载:https://www.linaro.org/downloads/
SoC厂商或者开发板厂商提供
通常芯片厂商或者开发板厂商都会提供该芯片的SDK,里面就包括了交叉编译工具链,在实际开发中,也是推荐使用SoC厂商提供的工具链,因为我们使用了不同版本的工具链,编译内核、应用程序可能会出现不兼容的问题。
3. 安装交叉编译工具链
对于眺望科技开发板提供的交叉编译工具链在 .\Core-A9核心板光盘资料\2.软件开发参考资料\1.编译工具 这个位置。下面以这个工具链为例进行安装。
现在linux下创建个文件夹用于存放交叉编译工具链。这里我在home目录下创建一个toolchain文件夹存放,我们在其他目录存放也是一样的。
mkdir toolchain把工具链弄进linux里面。把文件放到linux里面的方法有很多,可以参考这篇博文:https://blog.csdn.net/luobeihai/article/details/124003483 写的方法,非常详细。这里我就用 FileZilla 工具进行传输。如下:

解压安装包
tar -zxvf arm-poky-linux-gnueabi-gcc-5.3.0.tar.gz解压完成后,在当前目录下多了一个目录,就是我们刚刚解压出来的。如下:

安装完之后测试
交叉编译工具链在解压完成之后,就相当于安装完成了的。安装完成之后的交叉编译工具链就在
./fsl-imx-fb/4.1.15-2.0.1/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi这个目录下。我们进入到这个目录,可以看到里面有如下文件:
上面这些就是工具链的各种工具集合。我们运行工具链的下面命令,就会打印出版本等信息,这样就说明安装成功了。
arm-linux-gnueabihf-gcc -v
4. 设置工具链的PATH环境变量
当解压完成之后,实际上我们就可以运行这个工具链进行编译程序了,但是如果我们不在工具链的当前目录下运行工具链编译程序的话,linux系统就会报错说找不到这个程序。原因很简单,就是系统运行程序的查找路径不包括我们刚刚安装工具链的路径,所以我们需要把这个路径添加到PATH的环境变量中去。
可以执行下面命令打印linux系统PATH环境变量:
echo $PATH
执行完后,打印出的环境变量如下:
可以看出,并没有我们安装的交叉编译工具链的路径。下面接收如何添加PATH环境变量。
方法一:直接export导出PATH环境变量
只要输入如下命令即可:
export PATH=/home/twdz/toolchain/fsl-imx-fb/4.1.15-2.0.1/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:$PATH
导出了环境变量之后,我们就可以在任何目录下运行工具链的编译命令了。
但是注意这种方法,只对当前的终端有效,如果你关闭了这个终端在重新打开,就需要再次运行这个命令。
方法二:修改 .bashrc 文件
要想设置的环境变量永久生效,就在用户的宿主目录(就是各个用户的home目录)下,有一个 .bashrc 的隐藏文件,如下:

如果没有这个文件的话,自己创建这个文件即可。
我们把上面的那句命令,添加到 .bashrc 文件的末尾即可。输入如下命令打开这个文件:
vi .bashrc
然后添加 export 的那句命令即可。如下:
这样子设置的交叉编译工具链的 PATH 环境变量就永久生效了。注意你设置的是哪个用户的 .bashrc 文件,则这个用户就是永久生效的。如果你切换了用户,那么就不起作用了。
边栏推荐
- 无线传感器网络定位综述
- 全面质量管理理论
- Violence recursion to dynamic programming 02 (very clever game of CARDS)
- 面试官:生产环境中 CPU 利用率飙高怎么办?
- 【微信小程序】全局配置
- 接口和抽象
- 期货合约知多少
- The reason for Apple's official price reduction has been found, and it is also facing declining sales and even inventory problems
- How to merge the code when there is a code conflict in the collaborative development of multiple people?
- plsql连接oracle使用完毕之后关闭问题
猜你喜欢
![[10:00 Open Class]: Application Exploration of Kuaishou GPU/FPGA/ASIC Heterogeneous Platform](/img/d8/a367c26b51d9dbaf53bf4fe2a13917.png)
[10:00 Open Class]: Application Exploration of Kuaishou GPU/FPGA/ASIC Heterogeneous Platform

How to merge the code when there is a code conflict in the collaborative development of multiple people?

中国互联网科技企业群狼围攻,谷歌终于遭受重挫导致利润大跌,它为推动鸿蒙的发展而后悔...

Network connection optimization for instant messaging mobile terminal development

关于知识付费的一些思考

EA&UML日拱一卒-活动图::Object actions(续)

第4章_2——视图的使用

潘多拉 IOT 开发板学习(RT-Thread)—— 实验19 MQTT 协议通信实验(学习笔记)

AI全流程开发难题破解之钥

【模板引擎】微服务学习笔记六:freemarker模板引擎的常用命令介绍
随机推荐
有关包装类的一道经典面试题
国产手机将用户变成它们的广告肉鸡,难怪消费者都买iPhone了
【堡垒机小知识】硬件堡垒机是什么意思?其与云堡垒机有什么区别?
Nine kinds of way, teach you to read the resources files in the directory path
打卡广汽本田喜悦安全驾驶中心,体验最刁钻的场地训练
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
EA&UML日拱一卒-活动图::Feature和StuctualFeature
系列文章|云原生时代下微服务架构进阶之路 - Boris
基于降噪自编码器与改进卷积神经网络的采煤机健康状态识别
马尔可夫跳变线性系统最优控制的研究现状与进展
Topic 1125: - delegate * C language training
C#实现线程管理类
第4章_2——视图的使用
中国互联网科技企业群狼围攻,谷歌终于遭受重挫导致利润大跌,它为推动鸿蒙的发展而后悔...
kubernetes中正strace etcd
Children's programming electronics (graphical programming Scratch secondary level exam parsing (choice) in June 2022
【论文阅读】异常检测的视频通过Self-Supervised和多任务学习
84.(cesium之家)cesium模型在地形上运动
全面质量管理理论
1184. 欧拉回路