天天看點

交叉編譯工具鍊的使用

1、交叉編譯工具

arm-linux-gcc

arm-linux-addr2line

arm-linux-objcopy

arm-linux-readelf

arm-linux-ar

arm-linux-ld

arm-linux-objdump

arm-linux-size

arm-linux-nm

arm-linux-strip

arm-linux-cc

arm-linux-gprof

arm-linux-c++filt

arm-linux-as

arm-linux-cpp

arm-linux-gccbug

arm-linux-ldd

arm-linux-populate

arm-linux-strings

arm-linux-c++

arm-linux-g++

arm-linux-gcov

arm-linux-ranlib

如何檢視各交叉編譯工具的幫助資訊:

例如檢視arm-linux-gcc的幫助資訊:

    $ arm-linux-gcc --help

常用的交叉編譯工具:

1.1 交叉編譯器 arm-linux-gcc

    和X86平台下的gcc的基本用法用法是完全一樣的;不同之處:标準的gcc所引用的頭檔案路徑為 /usr/include/stdio.h,arm-linux-gcc所引用的頭檔案路徑為其安裝路徑下,如 /usr/local/armtools/4.5.1/bin/..

1.2 交叉連結器 arm-linux-ld

    arm-linux-ld指令是ARM平台下的交叉連結器,把程式連結成可以在ARM平台下運作。

    用法: arm-linux-ld -Tled.lds led.o -o led.elf

               把led.o連結成led.elf檔案;led.lds是連結器腳本,

1.3 交叉elf檔案工具 arm-linux-readelf

檢視.elf格式檔案: arm-linux-readelf -a led.elf

                          -a 參數是檢視.elf檔案的所有内容

注意:編譯的程式運作不了有兩個原因:一個是要看運作平台對不對,第二個是要看處理器的大小端跟編譯的程式的大小端是否對應,可以使用arm-linux-readelf -a xxx.elf 指令檢視編譯出來的程式大小端情況和程式運作平台。

    如下圖所示,編譯後的程式隻能運作在小端(little endian)的處理器上,其運作平台Machine是ARM。絕大多數ARM處理器都是小端的。

交叉編譯工具鍊的使用

    檢視程式運作平台還可以使用file xxx (xxx為編譯後可執行檔案) 指令檢視。

    如一個應用程式不能執行,排除了運作平台和大小端的情況後,還有可能是庫不對。

使用arm-linux-readelf -d xxx (xxx為編譯後可執行檔案)檢視運作庫;如hello程式運作庫為libc.so.6,如果開發闆上沒有這個庫,程式是運作不了的。

交叉編譯工具鍊的使用

1.4 交叉反彙編器 arm-linux-objdump

把hello.c檔案編譯成hello可執行檔案:arm-linux-gcc hello.c -o hello

用法:arm-linux -objdump -D -S hello >dump

         把hello可執行檔案反彙編後輸入儲存到dump檔案中。

         -D -S 是反彙編參數,>dump 把hello反彙編後的内容儲存到dump檔案中

交叉編譯工具鍊的使用

注意: 在編譯hello時沒有使用-g參數,反彙編後的代碼和原來C代碼對應不起來。我們可以在編譯hello時使用-g參數:

    先把hello.c檔案編譯成hello可執行檔案:arm-linux-gcc -g hello.c -o hello;運作arm-linux -objdump -D -S hello >dump指令,打開dump檔案可以看到

交叉編譯工具鍊的使用

1.5檔案格式轉換器 arm-linux-objcopy

    使用arm-linux-objcopy指令可以把ELF格式的檔案轉換成二進制檔案。

    檔案格式轉換的原因:elf格式的檔案不能直接在ARM上運作(ARM隻能運作二進制格式的檔案);

    用法:arm-linux-objcopy -O binary led.elf led.bin

            把led.elf格式的檔案轉換成led.bin二進制檔案。

1.6庫管理器arm-linux-ar

    arm-elf-ar将多個可重定位的目标子產品歸檔為一個函數庫檔案。采用函數庫檔案,應用程式能夠從該檔案中自動裝載要參考的函數子產品,同時将應用程式中頻繁調用的函數放入函數庫檔案中,易于應用程式的開發管理。arm-elf-ar支援ELF格式的函數庫檔案.