良人从零开始的踩坑笔记:Linux编译工具GCC

因为我上课没好好听

什么是GCC

GCC,全称GNU Compiler Collection,指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,也是GNU工具链的主要组成部分之一。

原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC在发布后很快地得到扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,Go与其他语言。

许多操作系统,包括许多类Unix系统,如Linux及BSD家族都采用GCC作为标准编译器。

GCC编译流程

GCC的编译流程分为四个步骤,分别为:

  • 预处理 Pre-processing
  • 编译 Compiling
  • 汇编 Assembling
  • 链接 Linking
    在这里插入图片描述

预处理 Pre-processing

现有以下hello.c源代码

在这里插入图片描述

在预处理阶段,编译器将上述代码中的stdio.h编译进来,我们可以使用" -E "进行查看。

在这里插入图片描述

GCC指令的一般格式为: gcc [选项] 要编译的文件 [选项] [目标文件]
其中,目标文件可缺省,Gcc默认生成可执行文件,命为:编译文件.out

以下是hello.i文件的部分内容
在这里插入图片描述
由此可见,Gcc对hello.c进行预处理,把stdio.h的内容插入到了hello.i文件中。

编译 Compiling

在编译阶段中,Gcc会检查代码的规范性,检查无误后把代码翻译为汇编语言。我们可以使用-S选项查看。
在这里插入图片描述
以下是hello.s文件的内容在这里插入图片描述
由此可见Gcc已经将其转化为汇编了。

汇编 Assembling

汇编阶段中Gcc将编译生成的.s文件转化为目标文件,我们可以使用-c选项进行查看。在这里插入图片描述

链接 Linking

在这里插入图片描述

函数库

静态库
动态库

Gcc常用使用示例

  • gcc -E hello.c -o hello.i
    对hello.c文件进行预处理,生成hello.i文件
  • gcc -S hello.i -o hello.s
    对预处理文件进行编译,生成汇编文件hello.s
  • gcc -c hello.s -o hello.o
    对汇编文件进行编译,生成目标文件hello.o
  • gcc hello.o -o hello
    对目标文件进行链接,生成可执行文件hello.out
  • gcc hello.c -o hello
    直接编译链接hello.c文件生成可执行文件
  • gcc -c hello.c 或 gcc -c hello.c -o hello.o
    编译生成可重定位目标文件

Gcc总体选项列表

后缀名所对应的语言
-o生成目标文件(.i、.s、.o、可执行文件等)
-c只编译不链接,生成目标文件".o"
-S只编译不汇编,生成汇编代码
-E只进行预编译,不做其他处理
-g在可执行程序中包含标准调试信息
-o file把输出文件输出到file里
-v打印出编译器内部编译个过程的命令行信息和编译器的版本
-I dir在头文件的搜索路径列表中添加dir目录
-L dir在库文件的搜索路径列表中添加dir目录
-static链接静态库
-llibrary链接library库文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值