GCC编译器工具常用命令及ELF格式

本文详细介绍了GCC编译工具集及其在Linux环境下的常用命令,包括预处理、编译、汇编和连接等阶段。同时,讨论了C运行库的组成和作用,重点解析了ELF文件格式的组成部分和类型。通过对GCC编译过程的深入理解,有助于开发者更好地管理和优化程序编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

GCC(GNU C Compiler)是编译工具。本文所要介绍的将 C/C++语言编写的程序 转换成为处理器能够执行的二进制代码的过程即由编译器完成。

一、GCC编译工具集

1、工具

工具 说明及作用
ar 汇编器,将汇编语言代码装换成目标文件
as 汇编
ld 链接器,把编译生成的多个目标文件组织成最终的可执行程序文件
nm 可用于查看目标文件中出现的符号
objcopy 可用于目标文件格式转换,如.bin 转换成 .elf 、.elf 转换成 .bin等
objdump 可用于查看目标文件的信息,最主要的作用是反汇编
readelf 可用于查看目标文件或可执行程序文件的信息
size 可用于查看目标文件不同部分的尺寸和总尺寸

2、系列参数

参数 作用
-E 只做预处理,不编译
-S 只编译,将C程序编译为汇编文件
-c 只汇编,不链接
-o 指定输出的文件名

二、Linux GCC 常用命令

1、简介

GCC 的意思也只是 GNU C Compiler而已。经过了这么多年的发展,GCC已经不仅仅能支持 C 语言;它现在还支持Ada语言、C++ 语言、Java 语言、Objective C语言、Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等。而GCC也不再单只是 GNU C语言编译器的意思了,而是变成了GNU Compiler Collection 也即是 GNU编译器家族的意思了。

2、简单编译

先创建新目录mkdir test1.2,然后输入命令cd test1.2进入新目录

test.c

一步到位的编译指令gcc test.c -o test

实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译 (Compilation)、汇编 (Assembly)和连接(Linking)。

2.1 预处理

gcc -E test.c -o test.igcc -E test.c

可以输出 test.i 文件中存放着 test.c 经预处理之后的代码。预处理结果就是将 stdio.h 文件中的内容插入到 test.c 中。

2.2 编译为汇编代码(Compilation)

预处理之后,可直接对生成的 test.i 文件编译,生成汇编代码:

gcc -S test.i -o test.s 

gcc 的-S 选项,表示在程序编译期间,在生成汇编代码后,停止,-o 输出汇编代码文件。

2.3 汇编(Assembly)

对于上一小节中生成的汇编代码文件 test.s,gas 汇编器负责将其编译为目标文件,如下: gcc -c test.s -o test.o

2.4 连接(Linking)

gcc 连接器负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。对于上一小节中生成的test.o,将其与C标准输入输出库进行连接,最终生成程序 test。

gcc test.o -o test

执行./test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值