编译工具链

Posted big-devil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译工具链相关的知识,希望对你有一定的参考价值。

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命令可以直接将以上三个过程一步执行


以上是关于编译工具链的主要内容,如果未能解决你的问题,请参考以下文章

QtCreator配置交叉编译工具链

NDK交叉编译之自定义工具链

arm交叉编译工具链下载

求mips交叉编译工具链

如何制定android交叉编译工具链

如何构建MIPS交叉编译工具链