Linux编译器——gcc

一、介绍

     GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器。
     GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言,后来经过不断扩展能够支持更多的编程语言,如 C++、Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名为GNU编译器套件。

二、基本用法

1、语法

gcc [选项] 源文件 [选项] [目标文件]

2、选项列表

选项 含义
-E 仅执行到预处理阶段
-S 执行到编译阶段,将C代码编译成汇编代码
-c 执行到汇编阶段,将汇编代码编译成为机器可识别的二进制指令代码
-static 对生成的文件进行静态链接
-share 对生成的文件进行动态链接,需要动态库
-g 生成调试信息
-O0 不进行优化处理
-O1,-O2,-O3 优化处理,且优化级别依次升高
-w 不生成任何警告信息
-Wall 生成所有警告信息

三、编译过程

在这里插入图片描述

1、预处理

     功能:宏替换、头文件展开、去注释、条件编译
     实例:gcc -E test.c -o test.i

2、编译

     功能:语法分析及纠错,无错则将c代码编译成汇编代码
     实例:gcc -S test.c/test.i -o test.s

3、汇编

     功能:将汇编代码编译成为机器可识别的二进制指令代码
     实例:gcc -c test.s -o test.o

4、链接

     功能:生成可执行文件或库文件

(1)静态链接

     在编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。
     静态库命名方式:libc.alib是前缀,.a是后缀
     实例:gcc -static test.o -o test

(2)动态链接

     在编译链接时,并没有把库文件的代码加入到可执行文件中,而是在程序执行时由链接文件(记录函数的地址信息)加载库,这样可以节省系统的开销,但是运行时依赖库文件。
     动态库命名方式:libc.solib是前缀,.so是后缀
     实例:gcc test.o -o test
     要点:gcc默认生成的二进制程序是动态链接的

猜你喜欢

转载自blog.csdn.net/X_Perseverance/article/details/82949322
今日推荐