详解C/C++代码的预处理、编译、汇编、链接全过程

您所在的位置:网站首页 c如何编译成汇编 详解C/C++代码的预处理、编译、汇编、链接全过程

详解C/C++代码的预处理、编译、汇编、链接全过程

2023-03-14 11:32| 来源: 网络整理| 查看: 265

1. C/C++运行的四个步骤

编写完成一个C/C++程序后,想要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。每个步骤都会生成对应的文件,如下图所示(注意后缀名): C/C++编译全过程 第3节将通过一个简易C++工程演示图中的全过程,并解释细节。

2.名词解释

为了后面过程的介绍更方便,这里对C++编译过程中涉及的一些常用名词进行解释。

2.1 GCC、GNU、gcc与g++ GNU:一个操作系统,具体内容不重要,感兴趣可以参考:GCC、GNU到底啥意思?GCC:GNU Compiler Collection(GNU编译器集合)的缩写,可以理解为一组GNU操作系统中的编译器集合,可以用于编译C、C++、Java、Go、Fortan、Pascal、Objective-C等语言。gcc:GCC(编译器集合)中的GNU C Compiler(C 编译器)g++:GCC(编译器集合)中的GNU C++ Compiler(C++ 编译器)

简单来说,gcc调用了GCC中的C Compiler,而g++调用了GCC中的C++ Compiler。

对于 *.c 和 *.cpp 文件,gcc分别当作 c 和 cpp文件编译,而g++则统一当作cpp文件编译。 2.2 代码编译命令

gcc/g++常用命令:

指令选项功能-E(注意大写)预处理(Preprocess)指定的源文件,但不进行编译(Compile),这一步生成 *.i 文本文件-S(注意大写)编译指定的源文件,但不进行汇编(Assemble),这一步生成 *.s 汇编文件-c编译、汇编指定的源文件,但不进行链接(Link),这一步生成 *.o 目标文件-o指定生成文件的文件名-I liblib表示库文件或头文件目录,该指令选项用于手动链接程序可以调用的库文件、头文件-std=手动指定编程语言标准,如 -std=c++98、-std=c++11 等 2.3 GDB(gdb)

GDB(gdb)全称“GNU symbolic debugger”,是 Linux 下常用的程序调试器。 为了能够使用 gdb 调试,需要在代码编译的时候加上-g,如

g++ -g -o test test.cpp

本文中只演示从源代码生成可执行二进制文件的过程,暂不涉及调试过程。调试的配置会在另一篇文章中专门介绍。

3. C++编译过程详解

主要参考:

C++ 预编译,编译,汇编,链接 C/C++语言编译链接过程

本节内容用下面的简单C++工程做演示。示例的文件结构如下:

|—— include |—— func.h |—— src |—— func.cpp |—— main.cpp

其中,main.cpp是主要代码,include/func.h是自定义函数的头文件,src/func.cpp是函数的具体实现

各个文件的内容如下:

// main.cpp #include #include "func.h" using namespace std; int main(){ int a = 1; int b = 2; cout cout


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3