1 交叉編譯環(huán)境簡(jiǎn)介
首先說一下什么是交叉編譯:我們?cè)?ubuntu 中寫了一個(gè)程序,比如 main.c,然后使用 ubuntu 的編譯器進(jìn)行編譯,生成的可執(zhí)行文件自然可以在 ubuntu 中運(yùn)行。但是生成的可執(zhí)行文件可以在我們的開發(fā)板中能運(yùn)行嗎?答案當(dāng)然是否定的,原因很簡(jiǎn)單,就是平臺(tái)不同,芯片架構(gòu)不同。那我們?nèi)绾问沟?ubuntu 編譯出來的可執(zhí)行文件在開發(fā)板上面運(yùn)行呢,當(dāng)然就要借助一些工具了,通過一些工具進(jìn)行對(duì)程序編譯,生成在開發(fā)板上可以運(yùn)行的文件,那這些工具我們把它叫做交叉編譯工具,把這種從一個(gè)平臺(tái)開發(fā)另一個(gè)平臺(tái)應(yīng)用的方式稱為交叉編譯。
Toolchain 即交叉編譯工具,要在 ubuntu 編譯我們寫的應(yīng)用程序使得生成開發(fā)板可以執(zhí)行的文件,必須有這一套工具才可以進(jìn)行!
2 交叉工具的配置
首先,我們查看是否已經(jīng)有交叉編譯工具:
顯然沒有Toolchain!
注意:在本節(jié)教程的附件里編者已經(jīng)給出了交叉編譯工具。
好的,配置OpenWrt 使得支持toolchain。在openwrt/目錄下運(yùn)行 make menuconfig,并且選中 toolchain:
保存之后,編譯 OpenWrt:
$make V=99
編譯完成之后,我們可以查看是否有交叉編譯工具包的存在。
OK,解壓交叉編譯工具包:解壓完成后,然后我們cd 到解壓完成后的工具包中,再進(jìn)入該工具包中的另一個(gè)目錄,找到 bin 文件夾,同樣cd 進(jìn)去 bin 文件夾。
好了,現(xiàn)在我們就擁有交叉編譯工具了,我們要把交叉編譯工具的路徑保存在一個(gè)環(huán)境變量中,這樣做是為了,我們編譯程序時(shí)會(huì)根據(jù)這個(gè)環(huán)境變量找到交叉編譯工具的位置。以 root 的權(quán)限編輯如下文件:
#vi /etc/environment
注意:也可用sudo vi /etc/environment。
編輯前該文件的內(nèi)容如下(我的ubuntu):
好的,增加我們交叉編譯工具路徑后(注意以冒號(hào)分隔)。為了讓這個(gè)環(huán)境變量起作用,我們重啟 ubuntu!
【注意】還可如下配置。
- 拷貝OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2到虛擬機(jī)中的/opt/目錄下
- 解壓OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2, 用命令
sudo tar -xvf OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2 //必須用超級(jí)用戶模式
- 編輯~/.bashrc文件, vi ~/.bashrc
在文件最后增加一行
export PATH=$PATH: /opt/OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin
保存退出
- 運(yùn)行 source ~/.bashrc 讓文件生效
- 測(cè)試
方法一:
在命令行下輸入 mipsel-o 然后按tab鍵看會(huì)不會(huì)自動(dòng)補(bǔ)全
方法二:
輸入:mipsel-openwrt-linux- -v
3 測(cè)試交叉編譯環(huán)境
重啟完成后,我們編寫一個(gè)非常簡(jiǎn)單的應(yīng)用程序:
#include < stdio.h >
int main ()
{
printf(“hello world!n”);
return 0;
}
然后使用交叉編譯工具進(jìn)行編譯!
編譯完成后生成可執(zhí)行文件:
然后我們嘗試在ubuntu中運(yùn)行可執(zhí)行文件 main:
很顯然,這個(gè)可執(zhí)行文件無法在 ubuntu 上運(yùn)行,但是,卻可以在我們開發(fā)板中運(yùn)行,我們把可執(zhí)行文件移動(dòng)到開發(fā)板中進(jìn)行執(zhí)行:
注意:main的權(quán)限應(yīng)為777,否則無法運(yùn)行。
【注意】交叉編譯工具鏈編譯的時(shí)報(bào)沒有STAGING_DIR,它在ubuntu上的/home/farsight/chaos_calmer/staging_dir,在ubuntu上鍵入下面命令
export STAGING_DIR=/home/farsight/chaos_calmer/staging_dir
或者放入.bashrc中,
$vi ~/.bashrc
在最后一行添加export STAGING_DIR=/home/farsight/chaos_calmer/staging_dir即可
$ source ~/.bashrc
審核編輯:湯梓紅
-
Ubuntu
+關(guān)注
關(guān)注
5文章
563瀏覽量
29702 -
交叉編譯
+關(guān)注
關(guān)注
0文章
32瀏覽量
12636 -
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3265瀏覽量
57677 -
OpenWrt
+關(guān)注
關(guān)注
10文章
130瀏覽量
39296
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論