GCC简介

查看版本  gcc/g++ -v/--version

gcc工作流程

  1. 预编译(源代码:.c .c++ .h):gcc -E main.c -o main.i
  2. 编译(预处理后源代码:.i):gcc -S main.i -o main.s
  3. 汇编(汇编代码:.s):gcc -c main.s -o main.o
  4. 链接(目标代码:.o,启动代码,库代码,其他目标代码):gcc main.o -o main
  • 预编译:删除所有“#define”,并展开所有宏定义,同时处理所有条件预编译指令,然后处理“#include”预处理指令,将被包含的文件插入到该预编译指令的位置,删除所有注释,添加行号和文件名标识,编译编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号,最后保留“#pragma”编译器指令,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。
  • 编译阶段:词法分析、语法分析、语义分析,代码优化,汇总符号,生成汇编代码。
  • 汇编阶段:将汇编指令翻译成二进制格式,生成各个 section,生成符号表。
  • 链接阶段:合并各个 section,调整 section 的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址,符号重定位。

gcc和g++区别

  1. 后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序
  2. 后缀为.cpp的,两者都会认为是C++程序
  3. 编译阶段,g++会调用gcc,但是在链接阶段,因为需要C++的库,所以在这里需要用g++来完成链接。
  4. 对于“_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标准

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值