当前位置:网站首页>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
边栏推荐
- Gorm 读写分离(转)
- Read excel table data
- xshell/bash/zsh 等终端鼠标滚轮乱码问题(转)
- sharding key type not supported
- QT how to detect whether the mouse is on a control
- [FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions
- 205. 同构字符串
- Variable promotion and function promotion in JS
- [R language data science]: cross validation and looking back
- Fs7867s is a voltage detection chip used for power supply voltage monitoring of digital system
猜你喜欢

CVPR 2022 | greatly reduce the manual annotation required for zero sample learning, and propose category semantic embedding rich in visual information (source code download)

TestSuite and testrunner in unittest

1200. 最小绝对差

锐成芯微冲刺科创板:年营收3.67亿拟募资13亿 大唐电信是股东

How to package QT and share exe

MySQL5免安装修改

Mask wearing detection based on yolov1
![去除重复字母[贪心+单调栈(用数组+len来维持单调序列)]](/img/af/a1dcba6f45eb4ccc668cd04a662e9c.png)
去除重复字母[贪心+单调栈(用数组+len来维持单调序列)]

【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结

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
随机推荐
【C 题集】of Ⅶ
Ws2811 m is a special circuit for three channel LED drive and control, and the development of color light strip scheme
IDEA快捷键大全
游戏出海,全球化运营
LifeCycle
[FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions
sharding key type not supported
Unittest框架之断言
php 日志调试
GCC【6】- 编译的4个阶段
Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
Yingshi Ruida rushes to the scientific and Technological Innovation Board: the annual revenue is 450million and the proposed fund-raising is 979million
Gorm data insertion (transfer)
R语言使用lattice包中的bwplot函数可视化箱图(box plot)、par.settings参数自定义主题模式
测试流程整理(2)
MySQL 5 installation and modification free
Applet live + e-commerce, if you want to be a new retail e-commerce, use it!
Mask wearing detection based on yolov1
学习项目是自己找的,成长机会是自己创造的
2022游戏出海实用发行策略