編譯工具鏈


GCC命令:

格式:gcc -[命令選項]  文件名(這里指需要編譯的文件名)

一個C語言程序需要經過這幾個過程才能進行一個可以執行的文件

例如hello.c這個源文件

Hello.c——> hello.i——>hello.s——>hello.o——>hello

  -E          -S        -C          

 

 

將一個匯編文件編譯成一個可以燒寫到開發板中二進制文件的步驟

(1)執行命令arm-linux-gcc -c -g  XXX.S (注意最后的擴展名是大寫)

(2)執行命令arm-linux-gcc -T  XXX.lds -o  XXX.elf  XXX.o

(3)執行命令arm-linux-objcopy  -O binary  XXX.elf  XXX.bin (注意第一命令選項是大寫的O)

 

 

編譯工具鏈:
arm-linux-gcc

例子:arm-linux-gcc  -g -c  led.S

注釋:-g -c 將只編譯不連接,編譯后將產生一個led.o的文件

arm-linux-ld

例子:arm-linux-ld -Tled.lds -o led.elf  led.o

注釋:-T 后接腳本文件,生成.elf 格式的文件 最后面接文件需要連接的 所有.o 格式的文件

arm-linux-readelf

例子:arm-linux-readelf  -a led.elf

注釋:用於讀取.elf文件的所有信息

例子:arm-linux-readelf -d  hello

注釋:用於讀取編譯成功的文件需要哪些庫的信息

arm-linux-objdump

例子:arm-linux-objdump -D -S hello

注釋:用於將一個已經編譯好的文件進行反匯編

例子:arm-linux-objdump -D-S hello >dump

注釋:將一個編譯好的可執行hello文件進行反匯編, >用於反匯編后文件過大將反匯編文件保存在一個叫dump的文件中。

但是這樣的反匯編代碼不易閱讀,做如下改進:

1arm-linux-gcc  -g helo.c -o hello

注釋:-g 表示調試編譯

(2)arm-linux-objdump -D-S hello >dump

注釋:將一個調試編譯的文件反匯編后保存在文件dump中。這樣的反匯編文件易於閱讀

arm-linux-objcopy -O binary led.elf -o led.bin

注釋:直接用gcc編譯的出來的文件是一個.elf格式的文件,只能運行與linux平台,因為linux中有一個elf解釋器。將其解釋成可以執行的文件。所以需要將其裝換成二進制文件。-O binary 表示將其轉換成二進制文件后跟需要轉換的文件

以上過程過於復雜:

Make命令可以直接將以上三個過程一步執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM