一、交叉工具链。
1、什么是交叉工具链?
1)回顾gcc编译器。
作用:将高级语言C转换目标程序。
GCC编译器 ubuntu平台
高级语言C文件 ----------------> 二进制文件(x86架构) -----------------> 程序效果
gcc编译器:在ubuntu编译,在ubuntu运行。
编译命令:gcc xxx.c -o xxx
执行命令:./xxx
gcc编译器是ubuntu自带的,它的路径:
gec@ubuntu:~$ which gcc
/usr/bin/gcc
结论:在同一个平台上编译运行,那么这个编译过程就称之为本地编译。
2)交叉工具链。
其实交叉工具链就是一个编译器,作用与gcc一样,都是将高级语言C转换成目标程序。
交叉工具链 ARM平台
高级语言C文件 -------------------> 二进制文件(ARM架构) -----------------> 程序效果
交叉工具链:在ubuntu编译,在ARM平台运行。
编译命令: arm-linux-gcc xxx.c -o xxx
执行命令: ./xxx
交叉工具链在纯净版本的ubuntu是没有的,所以想使用工具链,必须先移植工具到ubuntu下。
结论:在不同的平台上编译运行,那么这个编译过程就称之为交叉编译。
二、如何安装工具链到ubuntu中呢?
工具链资源:arm-5.4.0.tar.gz
1、先把工具链放置到共享目录下。
2、为工具链创建一个安装目录。
sudo mkdir /usr/5.4.0_arm/
sudo chmod 777 /usr/5.4.0_arm/
3、直接将工具链资源解压到/usr/5.4.0_arm/目录下即可。
tar zxvf arm-5.4.0.tar.gz -C /usr/5.4.0_arm/
4、安装结果。
/usr/5.4.0_arm/5.4.0/usr/bin/arm-linux-gcc。 -> 这个文件就是交叉工具链。
练习1: 安装工具链。
练习2: 在任何的路径下都能够使用arm-linux-gcc来编译程序。
思路:把arm-linux-gcc所在地"/usr/5.4.0_arm/5.4.0/usr/bin/"加入到环境变量PATH中。
1)先打开脚本。
gedit ~/.bashrc
2)在文件的末尾添加以下的这句话。
export PATH=$PATH:/usr/5.4.0_arm/5.4.0/usr/bin
3)生效脚本。
source ~/.bashrc
4)可以在任何的路径下使用arm-linux-gcc。
arm-linux-gcc hello.c -o hello
注意点:
当执行时,如果提示libmpfr.so:No such file or diretcory,那么需要这样处理:
把以下的这句话写入到脚本中:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/5.4.0_arm/5.4.0/usr/lib
三、使用交叉编译与本地编译有什么区别?
1、本地编译。
gcc hello.c -o hello
查看可执行文件的架构:
gec@ubuntu:~$ file hello
hello: ELF 64-bit LSB executable, -> 代表这个文件可执行
x86-64, -> ubuntu平台的架构 -> 说明该文件只能在x86平台运行。
2、交叉编译。
arm-linux-gcc hello.c -o hello
查看可执行文件的架构:
gec@ubuntu:~$ file hello
hello: ELF 32-bit LSB executable, -> 代表这个文件可执行
ARM, -> ARM平台的架构 -> 说明该文件只能在ARM平台运行。