2019年7月18日星期四(交叉工具链)
Posted zjlbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019年7月18日星期四(交叉工具链)相关的知识,希望对你有一定的参考价值。
一、交叉工具链?
1、什么是交叉工具链?
我们已经学习过的编译器是gcc编译器,gcc可以将高级语言转换目标程序。
gcc编译器特点:在Ubuntu编译,在Ubuntu运行。 -> 在同一个平台上编译运行,这个gcc编译器又称之为本地编译。
这个gcc编译器是Ubuntu中自带,gcc所的路径:/usr/bin/gcc。
其实交叉工具链就是一个编译器,但是交叉工具链在Ubuntu中是没有的,所以想使用交叉工具链,就必须要自己移植。
交叉工具链面向平台不是Ubuntu,而是ARM平台。交叉工具链特点:在Ubuntu中编译,在ARM平台运行。
结论:gcc编译出来的程序只能在Ubuntu中运行,而是交叉工具链编译出来的程序只能在ARM平台上运行。
2、什么是交叉编译?
本地编译就是在主机A上编译,在主机A上运行。
交叉编译就是在主机A上编译,在主机B上运行。
二、如何移植交叉工具链到ARM平台?
工具链:arm-2009q3.tar.bz2
1. 先将arm-2009q3.tar.bz2放置到共享目录下
2. 为交叉工具链创建一个新的目录,并给权限
sudo mkdir /usr/arm
sudo chmod 777 /usr/arm
3. 在linux下将arm-2009q3.tar.bz2直接解压到安装路径下即可。
tar jxvf arm-2009q3.tar.bz2 -C /usr/arm
4. 交叉编译器是哪个?
/usr/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc
三. 使用交叉工具链和本地gcc编译器编译的区别?
1. 本地编译
gcc test.c -o test -> 生成一个test的文件。
file test -> 查看test这个文件的属性。
test: ELF -> 代表该文件是可以执行。
32-bit -> 32位
LSB executable -> 代表当前该文件可以执行的。
Intel 80386 -> (x86平台),说明该文件只能在x86平台运行。
2. 交叉编译
/usr/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc test.c -o test -> 生成一个test的文件。
file test -> 查看test这个文件的属性。
test: ELF -> 代表该文件是可以执行。
32-bit -> 32位
LSB executable -> 代表当前该文件可以执行的。
ARM -> (ARM平台),说明该文件只能在ARM平台运行。
四、为工具链生成一个新的链接文件。
[email protected]:/usr/arm/arm-2009q3/bin$ sudo ln -s arm-none-linux-gnueabi-gcc arm-linux-gcc
结果:
lrwxrwxrwx 1 root root 26 Jul 18 02:12 arm-linux-gcc -> arm-none-linux-gnueabi-gcc
-rwxr-xr-x 2 gec gec 207948 Oct 16 2009 arm-none-linux-gnueabi-gcc
练习1:安装交叉工具链
练习2:为工具链取新的名字"arm-linux-gcc"
练习3:在任何的路径下都可以使用"arm-linux-gcc"
练习4:自己使用"arm-linux-gcc"编译一个程序,看看不是ARM架构!
以上是关于2019年7月18日星期四(交叉工具链)的主要内容,如果未能解决你的问题,请参考以下文章
部署虚拟环境linux系统 2019年7月15日星期一 第二课