1 开发环境、工具
通常所说的GCC是GUN Compiler Collection的简称,是Linux系统上常用的编译工具;GCC工具链软件包括GCC、Binutils、C运行库等
1.1 GCC
GCC(GNU C Compiler)是编译工具;将 C/C++语言 编写的程序转换成为处理器能够执行的二进制代码的过程 即由编译器完成
1.2 Binutils
一组二进制程序处理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。这一组工具是开发和调试不可缺少的工具
工具 说明
addr2line 用来将程序地址转换成其所对应的程序源文件及所对应的代码行,也可以得到所对应的函数。该工具将帮助调试器在调试的过程中定位对应的源代码位置
as 主要用于汇编
ld 主要用于链接
ar 主要用于创建静态库
ldd 可以用于查看一个可执行程序依赖的共享库
objcopy 将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等
objdump 主要的作用是反汇编
readelf 显示有关ELF文件的信息
size 列出可执行文件每个部分的尺寸和总尺寸,代码段、数据段、总大小等,请参见后文了解使用size的具体使用实例
1.3 C运行库
C语言标准主要由两部分组成:一部分描述C的语法,另一部分描述C标准库。C标准库定义了一组标准头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义,譬如常见的printf函数便是一个C标准库函数,其原型定义在stdio头文件中。
C语言标准仅仅定义了C标准库函数原型,并没有提供实现。因此,C语言编译器通常需要一个C运行时库(C Run Time Libray,CRT)的支持。C运行时库又常简称为C运行库。与C语言类似,C++也定义了自己的标准,同时提供相关支持库,称为C++运行时库
2、创建 C文件
编辑的过程就是创建和修改 C 程序的源代码;其实在 Linux 上,最常用的文本编辑器是 Vim 编辑器,也可以采用 gedit 编辑器
3、编译
3.1 编译步骤
C 程序的创建过程有五个基本步骤
步骤 命令 说明
编辑 vim {file_name} 编辑期间产生的文件,常称为源文件
预处理 gcc -E {file_name}.o -o {file_name}.i 生成 编译文件
编译 gcc -S {file_name}.o -o {file_name}.s 生成汇编文件
汇编 gcc -c {file_name}.o -o {file_name}.o 在 Linux 中这些文件的扩展名通常是 .o,在 Windows 下面这些文件的扩展名通常是 .obj 。如果编译成功就会生成一个文件,它与源文件同名。但扩展名为 .o 或者 .obj
链接 gcc -g -v -Wall {file_name}.o -o {file_name} 链接器将源代码文件中由编译器产生的各种对象模块组合起来,再从 C 语言提供的程序库中添加必要的代码模块,将它们组合成一个可执行文件;链接一旦成功,就会生成可执行文件,在 Windows 下面可执行文件的扩展名是 .exe,在 Linux 下面,可执行文件没有扩展名,但它的文件类型是可执行的
©著作权归作者所有:来自51CTO博客作者坚韧的石头的原创作品,如需转载,请注明出处,否则将追究法律责任
Linux 编译流程Linux C 语言