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的文件中。
但是這樣的反匯編代碼不易閱讀,做如下改進:
(1)arm-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命令可以直接將以上三個過程一步執行