C/C++-编译器(一):gcc/g++【级别:Level-0】【步骤:①编译(g++ -c xx.cpp -o a.o);②链接(g++ xx.o yy.o -o exe.bin)(检查函数引用)】

本文详细介绍了GCC编译器的发展、GCC编译工具链,以及C/C++程序的编译完整步骤和常见选项。通过实例展示了从源文件到可执行文件的编译过程,包括预处理、编译、汇编和链接四个步骤。同时,文章讨论了g++编译器的多种编译方式、常用的编译选项,如-g、-O[n],以及如何指定库文件和头文件路径。最后,文章提供了一些编译实战案例,包括直接编译、生成库文件并编译。
摘要由CSDN通过智能技术生成

一、gcc编译器简介

1、gcc编译器的发展

编辑器(如vi、记事本)是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!

编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。

gcc(GNU Compiler Collection,GNU 编译器套件)是由 GNU 开发的编程语言编译器。

gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,gcc同样适用于微软的Windows。

GCC最初代表“GNU C Compiler”,当时只支持C语言。 后来又扩展能够支持更多编程语言,包括 C、C++、Java、Ada、fortran、Object C、Object C++、Go语言 等。 因此,GCC也被重新定义为“GNU Compiler Collection”,成为历史上最优秀的编译器, 其执行效率与一般的编译器相比平均效率要高 20%~30%。

GCC的官网地址为:https://gcc.gnu.org/,在Ubuntu系统下系统默认已经安装好GCC编译器,可以通过如下命令查看Ubuntu系统中GCC编译器的版本及安装路径:
在这里插入图片描述

2、gcc编译工具链

GCC编译工具链(toolchain),是指以GCC编译器为核心的一整套工具。它主要包含以下三部分内容:

  • gcc-core:即GCC编译器,用于完成预处理和编译过程,把C代码转换成汇编代码。
  • Binutils :除GCC编译器外的一系列小工具包括了链接器ld,汇编器as、目标文件格式查看器readelf等。
  • glibc:包含了主要的 C语言标准函数库,C语言中常常使用的打印函数printf、malloc函数就在glibc 库中。

在很多场合下会直接用GCC编译器来指代整套GCC编译工具链。

二、gcc/g++编译完整步骤(流程)

gcc编译器从拿到一个c源文件到生成一个可执行程序,中间一共经历了四个步骤:
在这里插入图片描述
四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程:
在这里插入图片描述

hello.c文件:

#include <stdio.h>
#include <string.h> 
#include <stdlib.h> 

int main(void)
{
   
    printf("hello world\n");
    return 0;
}
deng@itcast:~/share/3rd/1gcc$ ls 
deng@itcast:~/share/3rd/1gcc$ hello.c
  • 第一步: 预处理-Pre-Processing(生成.i文件)
    # -E 选项指示编译器仅对输入文件进行预处理
    deng@itcast:~/share/3rd/1gcc$ gcc -E hello.c -o hello.i
    
  • 第二步: 编译-Compiling (生成.s文件)
    # -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译
    #  g++ 产生的汇编语言文件的缺省扩展名是 .s 
    deng@itcast:~/share/3rd/1gcc$ gcc -S hello.i -o hello.s
    
  • 第三步: 汇编-Assembling(生成.o文件)
    # -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
    # 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。
    deng@itcast:~/share/3rd/1gcc$ gcc -c hello.s -o hello.o
    
  • 第四步: 链接-Linking(生成可以执行文件)
    # -o 编译选项来为将产生的可执行文件用指定的文件名
    deng@itcast:~/share/3rd/1gcc$ gcc hello.o 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值