什麼是交叉編譯:在計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼,如在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:
# echo $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