赞
踩
GCC(GNU Compiler Collection)编译器套件,是GNU推出的一款功能强大、性能优越的多平台编译器,可以在多种平台上编译出可执行程序的编译器集合。本篇,我们将重点介绍在Linux系统下的GCC编译工具。
sudo apt update
sudo apt install build-essential
gcc --version
,出现gcc版本号即安装成功。预处理的主要作用是通过预处理的内建功能对一些可预处理资源进行等价替换。如:文件包含、条件编译、布局控制和宏处理等。
预处理命令:
gcc -E -o [目标文件] [编译文件]
,例:gcc -E -o test.i test.c
,生成后缀.i 文件。
预处理结束后,gcc先检查代码的规范性,是否有语法错误等,确定代码实际要做的工作。检查无误后,将代码翻译成汇编语言。
编译命令:
gcc -S -o [目标文件] [编译文件]
,例:gcc -S -o test.s test.i
,生成后缀.s 文件。
汇编阶段是将编译阶段生成的.s 文件转换为 .o的二进制目标代码。
汇编命令:
gcc -c [目标文件] [编译文件]
,例:gcc -c test.o test.s
,生成后缀.o 文件。
最后,我们在链接阶段将.o 文件进行链接生成可执行文件。
链接命令:
gcc -o [目标文件] [编译文件]
,例:gcc -o test test.o
,生成可执行文件。
文件后缀 | 对应语言 |
---|---|
.c | C源程序 |
.C /.cc /.cpp | C++源程序 |
.i | 经过预处理的C源程序 |
.ii | 经过预处理的C++源程序 |
.s /.S | 汇编原始程序 |
.o | 二进制目标文件 |
.a /.so | 编译后的静态/动态库文件 |
常用选项
(1)-c
,只进行预处理、编译和汇编阶段,不进行链接,生成二进制目标文件(.o 文件)
(2)-S
,只进行预处理、编译阶段,不进行汇编,生成汇编代码(.s 文件)。
(3)-E
,只对源程序进行预处理,生成.i 文件。
(4)-o
+ file,将file文件指定为输出的可执行文件。
(5)-g
,在可执行程序中包含标准调试信息(可使用gdb工具调试)。
(6)-I
+ dir,在头文件的搜索路径列表中添加dir目录。
库相关选项
(1) -static
,进行静态编译,即链接静态库,禁止链接动态库。
(2)-shared
,进行动态编译,可生成动态库文件。
(3)-L
+ dir,在库文件的搜索路径列表中添加dir目录。
(4)-fPIC
,Position Independent Code,生成位置独立的目标代码。通常再使用-shared生成动态库。
(5)-lname
,链接名称为libname.a(静态库)或libname.so(动态库)的库文件。若两个库都存在,则根据编译方式(-static还是-shared)进行链接。
警告和出错选项
(1)-w
,关闭所有警告信息。
(2)-ansi
,支持符合ANSI标准的C程序。
(3)-Wall
,允许发出gcc提供的所有有用的警告信息。
(4)-werror
,把所有警告信息转化为错误信息,并在警告发生时终止编译过程。
以上就是GCC编译的详细过程,为了简化编译过程,我们在Linux下的实际编程步骤如下。
1.利用vi、vim或gedit等编辑器,对test.c文件进行编辑。
2.利用gcc编译器对.c文件进行编译(两种方式)
(1)gcc test.c
,产生默认的test.out可执行文件
(2)gcc test.c -o test
,产生名为test的可执行文件
3.执行编译后生成的可执行文件:./ [可执行文件]
,例:./ test.out
或./ test
。
以上就是GCC编译工具简介和编译具体流程的详细内容,希望大家阅读后都能有所收获!原创不易,转载请标明出处,若文章出现有误之处,欢迎读者留言指正批评!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。