新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > arm gcc交叉編譯工具鏈建立

arm gcc交叉編譯工具鏈建立

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏

1.1.Arm交叉編譯工具鏈

下載地址Gnu.org

本文引用地址:http://m.butianyuan.cn/article/201611/317974.htm

binutils-2.21.1.tar.bz2

gcc-4.4.4.tar.bz2

glibc-2.11.2.tar.bz2

Glibc-ports-2.11.tar.bz2

Gmp-4.2.tar.bz2

Mpfr-2.4.0.tar.bz2

1.1.1.建立工作目錄

創(chuàng)建工具鏈文件夾:

[root@localhostcross]#mkdirembedded-toolchains

在建立了頂層文件夾embedded-toolchains,下面在此文件夾下建立如下幾個(gè)目錄:

Øsetup-dir,存放下載的壓縮包;

Øsrc-dir,存放binutils、gcc、glibc解壓之后的源文件;

Økernel,存放內(nèi)核文件,對(duì)內(nèi)核的配置和編譯工作也在此完成;

Øbuild-dir,編譯src-dir下面的源文件,這是GNU推薦的源文件目錄與編譯目錄分離的做法;

Øtool-chain,交叉編譯工具鏈的安裝位;

Øprogram,存放編寫(xiě)程序;

Ødoc,說(shuō)明文檔和腳本文件;

下面建立目錄,并拷貝源文件。

[root@localhostcross]#cd embedded- toolchains

[root@localhostembedded-toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc

[root@localhostembedded-toolchains] #ls

build-dir doc kernelprogram setup-dir src-dir tool-chain

[root@localhostembedded-toolchains] #cd setup-dir

拷貝源文件:

這里我們采用直接拷貝源文件的方法,首先應(yīng)該修改setup-dir的權(quán)限

[root@localhostembedded- toolchains]#chmod 777 setup-dir

然后直接拷貝/home/karen目錄下的源文件到setup-dir目錄中,如下圖:

建立編譯目錄:

[root@localhostsetup-dir]#cd ../build-dir

[root@localhostbuild-dir] #mkdir build-binutils build-gcc build-glibc

1.1.2. 輸出環(huán)境變量

輸出如下的環(huán)境變量方便我們編譯。

為簡(jiǎn)化操作過(guò)程。下面就建立shell命令腳本environment-variables:

[root@localhostbuild -dir] #cd ../doc

[root@localhostdoc] #mkdir scripts

[root@localhostdoc] #cd scripts

用編輯器vi編輯環(huán)境變量腳本envionment-variables:

[root@localhostscripts]#vi envionment-variables

exportPRJROOT=/home/mxl/diliuzhang/embedded-toolchains

exportTARGET=arm-linux

exportPREFIX=$PRJROOT/tool-chain

exportTARGET_PREFIX=$PREFIX/$TARGET

exportPATH=$PREFIX/bin:$PATH

截圖如下:

%% Q:為什么用了source ./environment-variables才正常執(zhí)行,去掉source就沒(méi)有執(zhí)行?%%

%%如果用source執(zhí)行,不需要腳本有執(zhí)行權(quán)限,權(quán)限為664也可以,執(zhí)行命令如下:%%

%%Sourceenvironment-variables %%

說(shuō)明:

TARGET變量用來(lái)定義目標(biāo)板的類(lèi)型,以后會(huì)根據(jù)此目標(biāo)板的類(lèi)型來(lái)建立工具鏈。參

看表6-1所示。目標(biāo)板的定義與主機(jī)的類(lèi)型是沒(méi)有關(guān)系的,但是如果更改TARGET的值,

GNU工具鏈必須重新建立一次。

PREFIX變量提供了指針,指向目標(biāo)板工具程序?qū)⒈话惭b的目錄。

TARGET_PREFIX變量指向與目標(biāo)板相關(guān)的頭文件和鏈接庫(kù)將被安裝的目錄。

PATH變量指向二進(jìn)制文件(可執(zhí)行文件)將被安裝的目錄。

如果不慣用環(huán)境變量的,可以直接用絕對(duì)或相對(duì)路徑。如果不用環(huán)境變量,一般都用絕對(duì)路徑,相對(duì)路徑有時(shí)會(huì)失敗。環(huán)境變量也可以定義在.bashrc文件中,這樣就不用老是export這些變量了。

體系結(jié)構(gòu)和TAEGET變量的對(duì)應(yīng)如下表6-1所示:

表6-1體系結(jié)構(gòu)和TAEGET變量的對(duì)應(yīng)

體系結(jié)構(gòu)

TARGET變量的值

PowerPC

Powerpc-linux

ARM

arm-linux

MIPS(big endian)

mips-linux

MIPS(little endian)

mipsel-linux

MIPS64

mips64-linux

SuperH3

sh3-linux

SuperH4

sh4-linux

I386

i386-linux

Ia64

ia64-linux

M68k

m68k-linux

M88k

m88k-linux

Alpha

alpha-linux

Sparc

sparc-linux

Sparc64

sparc64-linux

1.1.3. 建立二進(jìn)制工具(binutils)

Binutils是GNU工具之一,它包括連接器、匯編器和其他用于目標(biāo)文件和檔案的工具,它是二進(jìn)制代碼的處理維護(hù)工具。安裝Binutils工具包含的程序有addr2line、ar、as、c++filt、gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。對(duì)這些程序的簡(jiǎn)單解釋如下。

Øaddr2line把程序地址轉(zhuǎn)換為文件名和行號(hào)。在命令行中給它一個(gè)地址和一個(gè)可執(zhí)行文件名,它就會(huì)使用這個(gè)可執(zhí)行文件的調(diào)試信息指出在給出的地址上是哪個(gè)文件以及行號(hào)。

Øar建立、修改、提取歸檔文件。歸檔文件是包含多個(gè)文件內(nèi)容的一個(gè)大文件,其結(jié)構(gòu)保證了可以恢復(fù)原始文件內(nèi)容。

Øas主要用來(lái)編譯GNU C編譯器gcc輸出的匯編文件,產(chǎn)生的目標(biāo)文件由連接器ld連接。

Øc++filt連接器使用它來(lái)過(guò)濾C++和Java符號(hào),防止重載函數(shù)沖突。

Øgprof顯示程序調(diào)用段的各種數(shù)據(jù)。

Øld是連接器,它把一些目標(biāo)和歸檔文件結(jié)合在一起,重定位數(shù)據(jù),并連接符號(hào)引用。通常,建立一個(gè)新編譯程序的最后一步就是調(diào)用ld。

Ønm列出目標(biāo)文件中的符號(hào)。

Øobjcopy把一種目標(biāo)文件中的內(nèi)容到另一種類(lèi)型的目標(biāo)文件中。

Øobjdump顯示一個(gè)或者更多目標(biāo)文件的信息。使用選項(xiàng)來(lái)控制其顯示的信息,它所顯示的信息通常只有編寫(xiě)編譯工具的人才感興趣。

Øranlib產(chǎn)生歸檔文件索引,并將其保存到這個(gè)歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標(biāo)文件。

Øreadelf顯示elf格式可執(zhí)行文件的信息。

Øsize列出目標(biāo)文件每一段的大小以及總體的大小。默認(rèn)情況下,對(duì)于每個(gè)目標(biāo)文件或者一個(gè)歸檔文件中的每個(gè)模塊只產(chǎn)生一行輸出。

Østrings打印某個(gè)文件的可打印字符串,這些字符串最少4個(gè)字符長(zhǎng),也可以使用選項(xiàng)-n設(shè)置字符串的最小長(zhǎng)度。默認(rèn)情況下,它只打印目標(biāo)文件初始化和可加載段中的可打印字符;對(duì)于其它類(lèi)型的文件它打印整個(gè)文件的可打印字符。這個(gè)程序?qū)τ诹私夥俏谋疚募膬?nèi)容很有幫助。

Østrip丟棄目標(biāo)文件中的全部或者特定符號(hào)。

Ølibiberty包含許多GNU程序都會(huì)用到的函數(shù),這些程序有g(shù)etopt、obstack、strerror、strtol和strtoul。

Ølibbfd二進(jìn)制文件描述庫(kù)。

Ølibopcode用來(lái)處理opcodes的庫(kù),在生成一些應(yīng)用程序的時(shí)候也會(huì)用到它。

Binutils工具安裝依賴于Bash、Coreutils、Diffutils、GCC、Gettext、Glibc、Grep、Make、Perl、Sed、Texinfo等工具

下面將分步介紹安裝binutils-2.19.2的過(guò)程。

[root@localhostscript]#cd $PRJROOT/src-dir

[root@localhostsrc-dir]#tar jxvf ../setup-dir/binutils-2.19.tar.bz2

[root@localhostsrc-dir]#cd $PRJROOT/build-dir/build-binutils

創(chuàng)建Makefile:

[root@localhostbuild-binutils]../../src-dir/binutils-2.19/configure --target=$TARGET --prefix=$PREFIX

在build-binutils目錄下面生成Makefile文件,然后執(zhí)行make,make install。完成后可以在$PREFIX/bin下面看到我們的新的binutil。

注意:每個(gè)工具的文件名的前綴都是前面為T(mén)ARGET變量設(shè)定的值。如果目標(biāo)板arm-linux,那么這些工具的文件名前綴就會(huì)是arm-linux-。這樣就可以根據(jù)目標(biāo)板類(lèi)型找到正確的工具程序。

1.1.4. 建立內(nèi)核頭文件

在這里我們使用時(shí)2.6.29的內(nèi)核版本,因?yàn)榻徊婀ぞ哝湽ぞ哝準(zhǔn)轻槍?duì)特定的處理器和操作系統(tǒng)的,因此在編譯之前就需要對(duì)linux內(nèi)核進(jìn)行配制,可以通過(guò)“make config”或“make menuconfig”命令對(duì)內(nèi)核進(jìn)行配制,配制完成后,在linux源文件的目錄下就會(huì)生成一個(gè).config文件,這就是我們所需要的文件。

Note:目標(biāo)板的內(nèi)核版本是2.6.29

[root@localhostembedded- toolchains] #cdkernel

[root@localhostkernel] #tar jxvf../setup-dir/ linux-2.6.29.tar.bz2

[root@localhostkernel] #bunzip2../setup-dir/ patch-2.6.29.bz2

[root@localhostkernel] #cd linux-2.6.29

給Linux內(nèi)核打補(bǔ)丁:

[root@localhostlinux-2.6.29] #patch–p1

然后就是配置內(nèi)核,第一步是修改Makefile

修改Makefile:

ARCH =arm

CROSS_COMPILE = arm-linux- menuconfig

接著使用makemenuconfig進(jìn)入內(nèi)核配置菜單

或者直接寫(xiě):

# make ARCH=arm CROSS_COMPILE=arm-linux-menuconfig,注意在配置時(shí)一定要選擇處理器的類(lèi)型,比如我的目標(biāo)機(jī)使用的處理器是OMAP類(lèi)型的,就選TI OMAP:

System Type -à

ARMSystem Type -à

(x)TI OMAP

配置完退出并保存。

配置完須執(zhí)行make,參數(shù)如下:

[root@localhost linux-2.6.29]# make ARCH=armCROSS_COMPILE=arm-linux-(執(zhí)行過(guò)程中有錯(cuò)誤出現(xiàn)也沒(méi)關(guān)系,主要目的是產(chǎn)生頭文件version.h和autoconf.h)

執(zhí)行完檢查一下內(nèi)核目錄中的/kernel/linux-2.6.29/include/linux/version.h和autoconf.h文件是不是生成了,這是編譯glibc要用到的。version.h和autoconf.h文件的存在,說(shuō)明你生成了正確的頭文件。

接下來(lái)建立工具鏈需要的include目錄,并將內(nèi)核頭文件過(guò)去。

[root@localhostlinux-2.6.29] #cd include

[root@localhostinclude] #ln -s asm-arm asm

可以查看一下,經(jīng)過(guò)編譯可以自動(dòng)生成。如果已經(jīng)生成鏈接,則不必重新鏈接。(2.6.29已自動(dòng)生成)

[root@localhostinclude]#cd asm

[root@localhostasm]#ln -s arch-epxa arch

[root@localhostasm]#ln -s proc-armv proc

可以查看一下,經(jīng)過(guò)編譯可以自動(dòng)生成。如果已經(jīng)生成鏈接,則不必重新鏈接。

頭文件到交叉編譯工具鏈的安裝目錄:

[root@localhostasm]#mkdir –p $TARGET_PREFIX/include

[root@localhostasm]#cp –r $PRJROOT/kernel/linux-2.6.29/include/linux $TARGET_PREFIX/include

[root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-arm$TARGET_PREFIX/include/asm

[root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/include/asm-generic$TARGET_PREFIX/include

root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/include/asm$TARGET_PREFIX/include

root@localhostasm]#cp –r $PRJROOT/ kernel /linux-2.6.29/arch/arm/mach-omap2/include/mach$TARGET_PREFIX/include/asm

Note: mach-xxx是根據(jù)目標(biāo)板所用的cpu類(lèi)型來(lái)選擇的

1.1.5. 建立初始編譯器(boot strap gcc)

這一步的目的主要是建立arm-linux-gcc工具,注意這個(gè)gcc沒(méi)有g(shù)libc庫(kù)的支持,所以只能用于編譯內(nèi)核、BootLoader等不需要C庫(kù)支持的程序,后面創(chuàng)建C庫(kù)也要用到這個(gè)編譯器,所以創(chuàng)建它主要是為創(chuàng)建C庫(kù)做準(zhǔn)備,如果只想編譯內(nèi)核和BootLoader,那么安裝完這個(gè)就可以到此結(jié)束。安裝過(guò)程如下:

[root@localhostsetup-dir] #cd$PRJROOT/src-dir

[root@localhostsrc-dir]#tar jxvf ../setup-dir/gcc-4.4.4.tar.bz2

從GCC-4.3起,安裝GCC將依賴于GMP-4.1以上版本和MPFR-2.3.2以上版本。如果將這兩個(gè)軟件包分別解壓到GCC源碼樹(shù)的根目錄下,并分別命名為"gmp"和"mpfr",那么GCC的編譯程序?qū)⒆詣?dòng)將兩者與GCC一起編譯。建議盡可能使用最新的GMP和MPFR版本。

[root@localhostsrc-dir]# tar jxvf ../setup-dir/mpfr-2.4.0.tar.bz2

[root@localhostsrc-dir]# tar jxvf ../setup-dir/gmp-4.2.tar.bz2

[root@localhostsrc-dir]#mv mpfr-2.4.0 gcc-4.4.4/mpfr

[root@localhostsrc-dir]#mv gmp-4.2.0 gcc-4.4.4/gmp

l因?yàn)槭墙徊婢幾g器,還不需要目標(biāo)板的系統(tǒng)頭文件,所以需要使用--without-headers這個(gè)選項(xiàng)。否則會(huì)有很多*.h頭文件找不到的報(bào)錯(cuò)

l--enable-language=c用來(lái)告訴配置腳本,需要產(chǎn)生的編譯器支持何種語(yǔ)言,現(xiàn)在只需支持C語(yǔ)言。雖然配置為c,c++也可以的

l--disable-threads是因?yàn)閠hreads需要libc的支持。

l--disable-decimal-float,需要libc的支持,而我們?cè)诔醪骄幾g的時(shí)候尚未生成libc,否則出現(xiàn)以下的報(bào)錯(cuò):../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:52:18:error: fenv.h: No such file or directory ../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:In function __dfp_test_except:../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: FE_INEXACT undeclared (first use in this function)../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: (Each undeclared identifier is reported only once../gcc-4.3.1/libgcc/config/libbid/bid_decimal_globals.c:64:error: for each function it appears in.)

l --disable-shared,既然是第一次安裝ARM交叉編譯工具,那么本機(jī)的glibc支持的應(yīng)該是本機(jī)的編譯工具庫(kù),而不是ARM交叉編譯工具庫(kù)。forces GCC to link its internal libraries statically,沒(méi)有這個(gè)選項(xiàng),會(huì)有crti.o: No such file: No such file or directorycollect2: ld returned 1 exit status

注:由于沒(méi)有arm的glibc,需要使用--disable-libmudflap--disable-libssp,禁止兩個(gè)邊界檢查使用的庫(kù)。

同樣,由于第一次安裝ARM交叉編譯工具,那么支持的libc庫(kù)的頭文件也沒(méi)有,src-dir/gcc-4.4.4/gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS中添加兩個(gè)定義:-Dinhibit_libc–D__gthr_posix_h

原文:

TARGET_LIBGCC2_CFLAGS= -fomit-frame-pointer –fPIC

改后:

TARGET_LIBGCC2_CFLAGS= -fomit-frame-pointer -fPIC-Dinhibit_libc -D_gthr_posix.h

編譯:

[root@localhostsrc-dir]#cd $PRJROOT/build-dir/build-gcc

[root@localhostbuild-gcc]# ../../src-dir/gcc-4.4.4/configure --target=$TARGET --prefix=$PREFIX--without-headers --enable-languages=c --disable-shared --disable-threads--disable-decimal-float –disable-libmudflap –disable-lipssp

[root@localhostbuild-gcc]# make all-gcc

[root@localhostbuild-gcc]# make install-gcc

[root@localhostbuild-gcc]# make all-target-libgcc

[root@localhost build-gcc]# make install-target-libgcc

注:很多資料中之有前面兩項(xiàng),這只建立了gcc,沒(méi)有建立libgcc.a,這樣會(huì)在glibc的編譯中出現(xiàn)-lgcc沒(méi)有找到的錯(cuò)誤。報(bào)告:

……/build-tools/build-glibc/libc_pic.a

i586-linux-gcc-nostdlib-nostartfiles -r -o/home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/librtld.map.o-Wl,-( /home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/dl-allobjs.os/home/wei/workspace/mywork/moblin/build-tools/build-glibc/libc_pic.a -lgcc-Wl,-)-Wl,-Map,/home/wei/workspace/mywork/moblin/build-tools/build-glibc/elf/librtld.mapT

/workspace/wei/mywork/moblin/tools/bin/../lib/gcc/arm-linux/4.4.4/http://www.cnblogs.com/http://www.cnblogs.com/ram-linux/bin/ld:cannot find -lgcc

在glibc的編譯中,還需要libgcc_eh.a(否則出現(xiàn)錯(cuò)誤:-lgcc_eh沒(méi)有找到……bin/ld: cannot find-lgcc_eh),使用了--disable-shared的選項(xiàng),將不會(huì)生成libgcc_eh.a,可以通過(guò)對(duì)libgcc.a的鏈接來(lái)實(shí)現(xiàn)。

[root@localhostbuild-gcc]#ln -vs libgcc.a `arm-linux-gcc -print-libgcc-file-name | seds/libgcc/&_eh/`

Note:arm-linux-gcc與-print-libgcc-file-name之間有一個(gè)空格

運(yùn)行報(bào)告:

“/workspace/wei/mywork/moblin/tools/bin/../lib/gcc/i586-linux/4.3.3/libgcc_eh.a”-> “libgcc.a”

裝完成后,查看結(jié)果:

[root@localhostbuild-gcc] #ls$PREFIX/bin

如果arm-linux-gcc等工具已經(jīng)生成,表示boot trap gcc工具已經(jīng)安裝成功

1.1.6. 編譯glibc

這一步是最為繁瑣的過(guò)程,目標(biāo)板必須靠它來(lái)執(zhí)行或者是開(kāi)發(fā)大部分的應(yīng)用程序。glibc套件常被稱(chēng)為C鏈接庫(kù),但是glibc實(shí)際產(chǎn)生很多鏈接庫(kù),其中之一是C鏈接庫(kù)libc。因?yàn)?strong>嵌入式系統(tǒng)的限制,標(biāo)準(zhǔn)GNU C鏈接庫(kù)顯得太大,不適合應(yīng)用在目標(biāo)板上。所以需要尋找C鏈接庫(kù)的替代品,在這里現(xiàn)以標(biāo)準(zhǔn)GNU C為例建立工具鏈。

[root@localhostbuild-gcc]#cd $PRJROOT/src-dir

[root@localhostsrc-dir]#tar jxvf ../setup-dir/glibc-2.11.2.tar.bz2

[root@localhostsrc-dir]#tar jxvf ../setup-dir/glibc-ports-2.11.tar.bz2

[root@localhostsrc-dir]# mv –v glibc-ports-2.11 glibc-2.11.2/ports

[root@localhostsrc-dir]# cd glibc-2.11.2

[root@localhostglibc-2.11.2]# patch –Np1 -i ../../setup-dir/glibc-2.11.2-gcc_fix-1.patch

[root@localhostglibc-2.11.2]# patch –Np1 -i ../../setup-dir/glibc-2.11.2-makefile_fix-1.patch

[root@localhostglibc-2.11.2]#cd $PRJROOT/build-dir/build-glibc

配置環(huán)境變量

[root@localhostbuild-glibc] # CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib

配置

[root@localhostbuild-glibc]../../src-dir/glibc-2.11.2/configure /

--host=arm-linux --prefix=$PREFIX/$TARGET --with-tls --disable-profile

--enable-add-ons --with-headers=$PREFIX/$TARGET/include

libc_cv_forced_unwind=yeslibc_cv_c_cleanup=yes libc_cv_arm_tls=yes

編譯

[root@localhostbuild-glibc] #make

[root@localhostbuild-glibc] # make install

注:以上完成后,請(qǐng)查看一下$TARGET_PREFIX/lib目錄下的文件libc.so,看看GROUP的內(nèi)容是否指定到可以用于交叉編譯的庫(kù),如果不是請(qǐng)修改,如下:

libc.so文件(所在目錄是$TARGET_PREFIX/lib),將GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)改為GROUP (libc.so.6 libc_nonshared.a)

這樣連接程序ld就會(huì)在libc.so所在的目錄查找它需要的庫(kù),因?yàn)槟愕臋C(jī)子的/lib目錄可能已經(jīng)裝了一個(gè)相同名字的庫(kù),一個(gè)為編譯可以在你的宿主機(jī)上運(yùn)行的程序的庫(kù),而不是用于交叉編譯的。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

經(jīng)過(guò)查看,發(fā)現(xiàn)libc.so中的GROUP已經(jīng)是交叉編譯鏈的目錄,所以不用更改

對(duì)libc.so的修正·

vi$PREFIX /${TARGET}/lib/libc.so

去掉絕對(duì)路徑,修改后的內(nèi)容如下:

/*GNU ld script

Usethe shared library, but some functions are only in

thestatic library, so try that secondarily. */

OUTPUT_FORMAT(elf32-littlearm)

GROUP( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1.1.7. 建立全套編譯器(full gcc)

[root@localhostbuild-gcc]#../../src-dir/gcc-4.4.4/configure --target=$TARGET--prefix=$PREFIX--enable-languages=c,c++ --enable-shared

[root@localhostbuild-gcc]#make all

[root@localhostbuild-gcc]#make install

我們?cè)賮?lái)看看$PREFIX/bin里面多了哪些東西。你會(huì)發(fā)現(xiàn)多了arm-linux-g++、和arm-linux-c++幾個(gè)文件。

G++-gnu的c++編譯器。

C++-gnu的c++編譯器。

1.1.8. 完成工具鏈的設(shè)置

root@localhostbuild-gcc] #cd$TARGET_PREFIX/bin

查看文件是否為二進(jìn)制文件:

[root@localhostbin] #file as ar gccld nm ranlib strip

查看缺省的搜尋路徑:

[root@localhostbin] #arm-linux-gcc-print-search-dirs

1.1.9. 測(cè)試和驗(yàn)證交叉編譯工具

下面編寫(xiě)一個(gè)簡(jiǎn)單的C程序,使用建立的工具鏈。、

[root@localhostbin]#cd $PRJROOT/program

[root@localhostprogram]#vi hello.c

#include

int main(void)

{

printf("hellolinux/n");

return0;

}

[root@localhostprogram]#arm-linux-gcc hello.c -o hello –static(制作靜態(tài)可執(zhí)行文件)

制作的可執(zhí)行文件hello可以直接在目標(biāo)機(jī)上運(yùn)行。



關(guān)鍵詞: armgcc交叉編譯工具

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉