什么是交叉编译:在计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,如在keil软件编译,在单片机上运行。这就是交叉编译。
一.安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下(如果已经安装好的话,就可以免去这一步了,我的就已经是安装好的了):
#sudo apt-get install gcc g++ libgcc1 libg++ make gdb
打开共享目录/home/lishuai,将压缩文件arm-linux-gcc-4.3.2.tgz复制到/home/lishuai下
二.解压软件包arm-linux-gcc-4.3.2.tgz.
[root@localhost lishuai]#tar xzvf arm-linux-gcc4.3.2.tgz
1.目录4.3.2就是该交叉编译器的目录.从arm-linux-gcc-4.3.2.tgz解压信息来看,该软件包需要解压在usr/local/arm下,而实际却解压到了共享目录/home/lishuai下
2.进入目录usr/local/内,并没有找到arm文件夹,所以需要新建一arm文件夹,再将目录4.3.2移动到新建目录usr/local/arm下.其中,4.3.2/bin就是arm-linux-gcc的可执行文件.
[root@localhost local]#mv /home/lishuai/usr/local/arm/4.3.2 ./ 3.进入目录/usr/local/arm/4.3.2/bin,可以看到不同类型的编译器.但在ARM下经常用到是arm-linux-gcc.其实它也是一个gcc编译器,与gcc使用方法一致,不过该编译器是针对arm体系结构、Linux操作系统的编译器.利用该编译器就可以编译出运行在ARM上的Linux操作系统下的应用程序.
4.进入目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi.其中,lib目录下存放的是库文件,用户编写的应用程序在运行时就依赖于这些库文件.
5.此时还不能编译源码,系统一般会提示找不到命令arm-linux-gcc.这是环境变量在作祟.所以必须修改环境变量PATH.
[root@localhost lishuai]#vi /etc/profile 在"export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC"这一行的下面添加环境变量,
输入:export PATH=/usr/local/arm/4.3.2/bin:$PATH
指定变量PATH为交叉编译器的路径,目的是告诉操作系统可以到目录/usr/local/arm/4.3.2/bin下查找可执行文件 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)
方法一:修改/etc/bash.bashrc文件
#vim /etc/bash.bashrc
在最后加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH
方法二:修改/etc/profile文件:
# vim /etc/profile
增加路径设置,在末尾添加如下,保存/etc/profile文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
方法三:#export PATH=$PATH:/usr/local/arm/3.4.1/bin
注:(这只能在当前的终端下才是有效的!)
6.[root@localhost lishuai#:source /etc/profile //使已修改的配置文件/etc/profile生效
立即使新的环境变量生效,不用重启电脑:
对应方法一:#source /root/.bashrc
对应方法二:# source /etc/profile 检查是否将路径加入到PATH:
7.查看arm-linux-gcc编译器的版本
[root@localhost lishuai]#arm-linux-gcc -v
8.编译Hello World程序,测试交叉工具链
写下下面的Hello World程序,保存为hello.c
#include <stdio.h>
int main()
{
printf("Hello World!/n");
return 0;
}
执行下面的命令:
# arm-linux-gcc -o hello hello.c-------------------------------------------------------------
修改环境变量这一步修改/etc/profile文件
在path中添加arm-linux-gcc路径
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/arm/3.4.1/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi