细说交叉编译工具

本文探讨了CPU架构的X86和ARM区别,微架构的构成,以及交叉编译的概念。它解释了为何不在嵌入式设备上编译,以及gcc与g++在C++编译中的差异。重点介绍了在不同体系结构和操作系统间进行代码编译和运行的过程。
摘要由CSDN通过智能技术生成

要想理解交叉编译,首先要理解CPU的架构。
下面从几个方面开始说。

1. CPU的设计规范
设计一款CPU,要遵循CPU设计规范,也就是指令集。目前的指令集主要有两种,一种是X86架构,一种的ARM架构。(当然非主流的还有MIPS指令集、RISC-V指令集,二者基于RISC精简指令集)
英特尔和AMD采用的都是X86的指令集架构。
手机、平板采用的是ARM的指令架构。

ARM架构与X86架构的区别是: ARM主要是RISC精简指令集。 X86主要是复杂指令集CISC。

2. 微架构
指的是芯片的电路结构。相同的指令集可能会有不同的微架构。
比如英特尔和AMD都是X86的指令集,但是拆开芯片看到的微结构却相差很多。
微架构主要包括:运算单元、逻辑单元、寄存器等在三态,总线和单向总线、控制线的连接下组成了CPU的微架构。
3 . 交叉编译原理
交叉编译的概念指的是,在不同的平台编写、编译代码、运行。
这里所说的平台,需要详细说明一下。一个是体系结构,也就是上文所说的CPU的设计使用的架构。一个是操作系统。
二者均为平台所包含的内容。其中:
体系结构: x86、arm、MIPS、RISC-V等
操作系统:Windows、linux、VCE、vXworks
同一体系结构可以运行不同的操作系统,比如基于x86的pc机可以运行windows操作系统,也可以linux。
arm可以运行linux、也可以vxworks。
同一种操作系统也可以运行在不同的体系结构下。
比如我们编写代码一般是在windows下,编译代码一般是在linux下,而linux服务器一般是X86架构的(指的是用的Intel或者AMD的CPU芯片),这样编写出来的代码不可以在arm架构的开发板上运行。这时候就需要交叉编译,就是说在X86的机器上编译出能够在arm上运行的文件。
但同一个应用程序,不可能在多个平台下运行。如果想要运行,必须拿到这个应用程序的源代码,使用此平台特定的编译器, 编译后才可以在此平台运行。
因此想要编写在arm上运行的程序,就需要arm专用的编译器。

4. 为何不在嵌入式设备上编译?

因为编译对机器性能要求特别高,因为编译过程中会产生大量的中间文件,占用磁盘,只有机器性能好,编译才能够快速。嵌入式设备一般CPU处理速度比较慢、内存小、安装编译器内存不够等等。
所以一般都是在服务器上编译,在开发板上运行。

 所以步骤是:现在pc的linux系统下安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。

5 . 编译原理、gcc使用

(1) 编译的阶段:
在这里插入图片描述
(2) 编译使用的编译器
在这里插入图片描述
(3) gcc后参数,指定编译阶段
在这里插入图片描述
在这里插入图片描述
在编译过程中,系统会默认的在/usr/include文件夹中搜索系统的头文件,在/lib或者/usr/lib文件夹中搜索系统的库文件。
如果引用的头文件或者库文件不在上述文件路径,在需要使用-IDIR参数 +头文件搜索路径,使用-LDIR参数+库文件搜索路径,-ILIBRARY指令链接时需要的其他函数库。
在这里插入图片描述
在这里插入图片描述
(5) gcc和g++编译c++程序的不同
gcc只能编译C++源程序,不能与C++包含的库链接。
g++可以。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值