码迷,mamicode.com
首页 > 其他好文 > 详细

2019年7月18日星期四(交叉工具链)

时间:2019-07-18 19:56:11      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:编译   链接文件   运行   查看   ubunt   mkdir   权限   工具链   gcc编译   

一、交叉工具链?

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平台运行。

四、为工具链生成一个新的链接文件。

gec@ubuntu:/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日星期四(交叉工具链)

标签:编译   链接文件   运行   查看   ubunt   mkdir   权限   工具链   gcc编译   

原文地址:https://www.cnblogs.com/zjlbk/p/11209448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!