当前位置:网站首页>GCC简介
GCC简介
2022-06-28 10:51:00 【MoyangCitta】
查看版本 gcc/g++ -v/--version
gcc工作流程
- 预编译(源代码:.c .c++ .h):gcc -E main.c -o main.i
- 编译(预处理后源代码:.i):gcc -S main.i -o main.s
- 汇编(汇编代码:.s):gcc -c main.s -o main.o
- 链接(目标代码:.o,启动代码,库代码,其他目标代码):gcc main.o -o main
- 预编译:删除所有“#define”,并展开所有宏定义,同时处理所有条件预编译指令,然后处理“#include”预处理指令,将被包含的文件插入到该预编译指令的位置,删除所有注释,添加行号和文件名标识,编译编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号,最后保留“#pragma”编译器指令,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。
- 编译阶段:词法分析、语法分析、语义分析,代码优化,汇总符号,生成汇编代码。
- 汇编阶段:将汇编指令翻译成二进制格式,生成各个 section,生成符号表。
- 链接阶段:合并各个 section,调整 section 的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址,符号重定位。
gcc和g++区别
- 后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序
- 后缀为.cpp的,两者都会认为是C++程序
- 编译阶段,g++会调用gcc,但是在链接阶段,因为需要C++的库,所以在这里需要用g++来完成链接。
- 对于“_cplusplus”宏,它标志着编译器会把代码按C还是C++语法来解释,因此,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。
gcc参数选项
| 编译选项 | 说明 |
| -o test test.c / test.c -o test | 将test.c编译成可执行文件test |
| -I directory | 指定include包含文件的搜索目录 |
| -g | 在编译时生成调试信息 |
| -D | 在编译时指定一个宏 |
| -w | 不生成任何警告信息 |
| -W | 生成所有警告信息 |
| -On | 优化选项,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 |
| -l | 在程序编译的时候,指定使用的库 |
| -L | 指定编译的时候,搜索库的路径 |
| -fPIC/fpic | 生成与位置无关的代码 |
| -shared | 生成共享目标文件,通常用在建立共享库时 |
| -std | 指定C标准 |
边栏推荐
- appliedzkp zkevm(10)中的Transactions Proof
- Remote connection of raspberry pie in VNC viewer mode without display
- 一种跳板机的实现思路
- OpenHarmony应用开发之二维码生成器
- 获取系统当前日期
- MySQL查看数据库性能常用命令
- fastposter v2.8.4 发布 电商海报生成器
- JS基础8
- Hystrix deployment
- Guangzhou Customs supports the stable supply of food, agricultural products, traditional Chinese medicine and other civilian and biological resources to Hong Kong
猜你喜欢
随机推荐
BLE蓝牙模块NRF518/NRF281/NRF528/NRF284芯片方案对比
远程登录sshd服务
知道 Redis RDB 这些细节,可以少踩很多坑
Ribbon核心源码解析
Fastposter v2.8.4 release e-commerce poster generator
JS基础10
Metersphere实现UI自动化元素不可点击(部分遮挡)
Markdown -- basic usage syntax
Mongo数据库
Katalon framework tests web (XX) custom keywords and upload pop-up operations
How to use K-line diagram for technical analysis
树莓派无需显示屏的VNC Viewer方式的远程连接
爱可可AI前沿推介(6.28)
Metersphere uses JS to refresh the current page
Katalon当中的使用循环for、while和if...else、break、continue
MySQL (III)
[unity][ecs] learning notes (III)
字符串 & 堆 & 方法区
一款自动生成单元测试的 IDEA 插件,开发效率提升 70% 以上!
fastposter v2.8.4 发布 电商海报生成器


![[unity][ecs] learning notes (II)](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)






