当前位置:网站首页>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
.i
file , beGCC
The compiler only needs to compile this file . - If the file to be compiled is
.c
perhaps.cpp
Source file , beGCC
The 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
.c
file , begcc -c
The instruction will execute on the file Preprocessing 、 compile 、 assembly . - If the specified file is preprocessed
.i
file , begcc -c
Instruction to compile and assemble the file . - If the specified file is a compiled file , be
gcc -c
Instruction 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
边栏推荐
- gorm 之数据插入(转)
- MySQL之详解索引
- 1200. Minimum absolute difference
- 吃透Chisel语言.12.Chisel项目构建、运行和测试(四)——Chisel测试之ChiselTest
- ViewModel 初体验
- 好博医疗冲刺科创板:年营收2.6亿 万永钢和沈智群为实控人
- WS2818M是CPC8封装,是三通道LED驱动控制专用电路外置IC全彩双信号5V32灯可编程led灯带户外工程
- 2022g3 boiler water treatment examination question simulation examination question bank and simulation examination
- 测试流程整理(2)
- BLOB,TEXT GEOMETRY or JSON column 'xxx' can't have a default value query 问题
猜你喜欢
硬件基础知识-二极管基础
TestSuite and testrunner in unittest
The font of markdown grammar is marked in red
MATLAB中tiledlayout函数使用
392. Judgement subsequence
MySQL 5 installation and modification free
Install MySQL
基于YOLOv1的口罩佩戴检测
Huahao Zhongtian rushes to the scientific and Technological Innovation Board: the annual loss is 280million, and it is proposed to raise 1.5 billion. Beida pharmaceutical is a shareholder
Introducing testfixture into unittest framework
随机推荐
golang fmt.printf()(转)
Understand chisel language thoroughly 05. Chisel Foundation (II) -- combinational circuits and operators
10.(地图数据篇)离线地形数据处理(供Cesium使用)
Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值、标准差
The mouse wheel of xshell/bash/zsh and other terminals is garbled (turn)
使用默认路由作为指向Internet的路由
華昊中天沖刺科創板:年虧2.8億擬募資15億 貝達藥業是股東
go语言中的文件创建,写入,读取,删除(转)
[C question set] of VII
392. 判断子序列
Understand chisel language thoroughly 04. Chisel Foundation (I) - signal type and constant
ViewModel 初体验
Apple 5g chip research and development failure: continue to rely on Qualcomm, but also worry about being prosecuted?
【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结
Unittest框架之断言
php 日志调试
【C 题集】of Ⅶ
Yingshi Ruida rushes to the scientific and Technological Innovation Board: the annual revenue is 450million and the proposed fund-raising is 979million