日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

交叉编译工具链的使用

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 交叉编译工具链的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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格式的函數庫文件.

總結

以上是生活随笔為你收集整理的交叉编译工具链的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。