当前位置:网站首页>GCC [6] - 4 stages of compilation
GCC [6] - 4 stages of compilation
2022-07-04 14:16:00 【Small snails in big cities】
List of articles
Preface
GCC Compilation is divided into 4 Stages : Preprocessing 、 compile 、 assembly 、 link
gcc General format of instruction
gcc 【 Options 】 Files to compile 【 Options 】【 The output file 】
| Options | explain |
|---|---|
| -E | control GCC The compiler only preprocesses the source code |
| -S | control GCC The compiler only deals with the compilation phase of the specified file |
| -c | control GCC The compiler only deals with the formulated files to the assembly stage , And generate the corresponding target file |
| -o outfile | Specifies the filename of the output file |
eg: Here is a very simple paragraph hello.c Code , Take this code for example
#include <stdio.h>
#define NAME "mao"
void main()
{
printf("hello:%s\n",NAME);
}
One 、 Pretreatment stage
Preprocessing The main work of this stage is to delete all comments in the program 、 Deal with # The first order . Such as : Expansion of header file 、 Replacement of macro definitions .
For the above code #include <stdio.h> Indicates the import header file , In the pretreatment stage stdio.h The file will be loaded into my hello.c in , And for the... Used in the code NAME, It will be replaced with the real content defined by the macro mao, You can use the following command to perform preprocessing : Generate .i file ,linux The suffix of the file after preprocessing in the system is usually .i
gcc -E hello.c -o hello.i
Two 、 Compile phase
gcc In the compilation stage, various checks will be carried out on the preprocessed code ( Lexical analysis , Syntax analysis , Semantic analysis ), To determine whether our code conforms to the specification , If you generate assembly code (.s Final document )
Be careful :gcc -S You can't only compile pre processed .i file , It means control GCC The compiler only processes the specified file to the compilation stage
- If the file to be compiled is preprocessed
.ifile , beGCCThe compiler only needs to compile this file . - If the file to be compiled is
.cperhaps.cppSource file , beGCCThe compiler preprocesses and compiles it ( Two steps ).
gcc -S hello.i -o hello.s
3、 ... and 、 Assembly stage
hold .s The file is translated into binary .o file ( Target file )
Be careful :gcc -c It's not just about editing .s file , Its meaning is to control GCC The compiler only processes the specified file to the assembly stage
- If the specified file is
.cfile , begcc -cThe instruction will execute on the file Preprocessing 、 compile 、 assembly . - If the specified file is preprocessed
.ifile , begcc -cInstruction to compile and assemble the file . - If the specified file is a compiled file , be
gcc -cInstruction only performs assembly operations on this file .
gcc -c hello.s -o hello.o
Four 、 Link phase
The assembly phase compiles the code into binary files , And other components of the system ( For example, standard library 、 Dynamic link library, etc ) Combined to work properly , For example, call print Function print , In the preprocessing stage, it is only “stdio.h” The declaration in the header file is introduced , There is no function implementation , Then how to call it ?
This is the job of linking , Before linking, we deal with files , And linking is the process of packaging multiple files , It combines all object files and system components into an executable .
gcc hello.o -o hello
边栏推荐
- 学内核之三:使用GDB跟踪内核调用链
- IP lab monthly resumption · issue 5
- Vscode common plug-ins summary
- MySQL之详解索引
- Mongodb commonly used 28 query statements (forward)
- Idea shortcut keys
- CVPR 2022 | greatly reduce the manual annotation required for zero sample learning, and propose category semantic embedding rich in visual information (source code download)
- ARouter的使用
- R语言使用epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布
- Migration from go vendor project to mod project
猜你喜欢

学内核之三:使用GDB跟踪内核调用链

TestSuite and testrunner in unittest

Test evaluation of software testing

1200. 最小绝对差

自主工业软件的创新与发展

2022 practice questions and mock exams for the main principals of hazardous chemical business units

基于PaddleX的智能零售柜商品识别

Vscode common plug-ins summary

【Antd】Antd 如何在 Form.Item 中有 Input.Gourp 时获取 Input.Gourp 的每一个 Input 的value
![[FAQ] summary of common causes and solutions of Huawei account service error 907135701](/img/43/1a9786c89a5ab21d1fb8903cb7b77e.png)
[FAQ] summary of common causes and solutions of Huawei account service error 907135701
随机推荐
Learning projects are self-made, and growth opportunities are self created
Unittest框架之断言
中邮科技冲刺科创板:年营收20.58亿 邮政集团是大股东
R语言ggplot2可视化:gganimate包创建动态折线图动画(gif)、使用transition_reveal函数在动画中沿给定维度逐步显示数据
Programmer anxiety
Understand chisel language thoroughly 07. Chisel Foundation (IV) - bundle and VEC
吃透Chisel语言.03.写给Verilog转Chisel的开发者(没有Verilog基础也可以看看)
What is the real meaning and purpose of doing things, and what do you really want
Understand chisel language thoroughly 03. Write to the developer of Verilog to chisel (you can also see it without Verilog Foundation)
海外游戏代投需要注意的
The font of markdown grammar is marked in red
Innovation and development of independent industrial software
mac redis安装与使用,连接远程服务器 redis
Deming Lee listed on Shenzhen Stock Exchange: the market value is 3.1 billion, which is the husband and wife of Li Hu and Tian Hua
学内核之三:使用GDB跟踪内核调用链
The Secretary of Homeland Security warned immigrants "not to embark on a dangerous journey"
Can mortgage with housing exclude compulsory execution
MySQL version 8 installation Free Tutorial
Understand chisel language thoroughly 08. Chisel Foundation (V) -- wire, REG and IO, and how to understand chisel generation hardware
Install MySQL