Linux C 编译流程(GCC)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux C 编译流程(GCC)相关的知识,希望对你有一定的参考价值。
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 下面,可执行文件没有扩展名,但它的文件类型是可执行的 |
以上是关于Linux C 编译流程(GCC)的主要内容,如果未能解决你的问题,请参考以下文章