linux开发编译与链接

目录

编译与链接

GCC

GCC(GNU Compiler Collection)

GCC, the GNU Compiler Collection - GNU Project

由 GNU开发的,遵循 GPL 许可证发行的编译器套件

支持 C、C++、Objective-C、Fortran、Ada 和 Go 语 言等多种语言前端,已被移植到多种计算机体系架构 上,如 x86、ARM、RISC-V 等

GCC 的初衷是为 GNU 操作系统专门编写一款编译器, 现已被大多数 "Unix-like"操作系统(如 Linux、BSD、MacOS 等)采纳为标准的编译器

命令格式

gcc [options] [filenames]

gcc主要执行步骤

编译

(cc1,这里针对 C 语言,不同的语言有自 己的编译器):编译器完成 "预处理" 和 "编 译","预处理" 指处理源文件中以 "#" 开 头的预处理指令,譬如 #include、#define 等; "编译" 则针对预处理的结果进行一系列的词法分析、语法分析、语义分析,优化后生成汇 编指令,存放在 .o 为后缀的目标文件中

汇编(as)

汇编器将汇编语言代码转换为机 器(CPU)可以执行的指令

链接(ld)

链接器将汇编器生成的目标文件 和一些标准库(譬如 libc)文件组合,形成最 终可执行的应用程序

GCC涉及的文件类型

.c:C 源文件

.cc/.cxx/.cpp:C++ 源文件

.i:经过预处理的 C 源文件

.s/.S:汇编语言源文件

.h:头(header)文件

.o:目标(object)文件

.a/.so:编译后的静态库(archive)文件和共享库 (shared object)文件

a.out:可执行文件

ELF

ELF简介

ELF(Executable Linkable Format)是一种 Unix-like 系统上的二进制文件格式标准

ELF 标准中定义的采用 ELF 格式的文件分为 4 类:

ELF文件格式

ELF文件处理相关工具

Binutils:https://www.gnu.org/software/binutils/

ar:归档文件,将多个文件打包成一个大文件

as:被 gcc 调用,输入汇编文件,输出目标文件供链接器ld连接

ld:GNU 链接器。被 gcc 调用,它把目标文件和各种 库文件结合在一起,重定位数据,并链接符号引用

objcopy:执行文件格式转换

objdump:显示 ELF 文件的信息

readelf:显示更多 ELF 格式文件的信息(包括 DWARF 调试信息)