Linux下,使用gcc/g++编译器编译c/c++代码,cpp文件经过预处理,编译,汇编,链接到可执行文件

下载安装gcc:
Linux一般会自带gcc,如果没有就用rpm,yum,apt等包管理工具下一个,毫无难度。

O、gcc编译器:
1、用于c/c++源码的编译,但gcc本身不限于编译c/c++,还支持编译其他的很多种高级语言。
2、Linux开发c/c++一定要熟悉gcc
3、VS code本身没有编译功能,通过调用gcc编译器实现的c/c++的编译工作,有设计模式中委托工作的意思。
4、使用时:
gcc指令编译c代码
g++指令编译c++代码

一、文件的编译过程:
1、预处理 Pre-Processing,将.c/cpp生成.i文件
g++ -E test.cpp -o test.i
-E选项指定编译器只对输入文件继续处理
作用:
头文件和宏定义展开,将cpp文件扩展为一个完整的编译单元

在这里插入图片描述
在这里插入图片描述
使用cat或者vim可以查看预处理之后的文件的内容,经过预处理后,cpp文件变成了一个完整的编译单元,内容会比预处理之前多很多:
在这里插入图片描述

2、编译 compiling,将.i文件生成.s文件
g++ -S test.i -o test.s
-S告诉g++在为c++代码产生了汇编语言文件后停止编译
g++产生的汇编语言文件的缺省扩展名为.s
作用:
将编译单元中的所有语言转换为汇编语言。

在这里插入图片描述
在这里插入图片描述

3、汇编 assembling,将.s文件生成.o文件
g++ -c test.s -o test.o
-c告诉g++仅把源代码便以为机器语言的目标代码
g++产生的目标代码文件的默认扩展名为.o
作用:
将汇编语言转换为计算机可以直接识别的二进制语言。

在这里插入图片描述
在这里插入图片描述

4、链接 linking,将.o文件生成为bin文件
g++ test.o -o test
-o指定输出的文件名
作用:
二进制语言转换成可以执行的可执行文件。

在这里插入图片描述

在这里插入图片描述
5、整体编译命令时,虽然命令是一步的,但是命令的执行过程还是经过了上面四个步骤。
g++ test.cpp -o test

在这里插入图片描述

6、调用生成的可执行文件时,需要加上路径,光有文件名将不会执行。
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐