gcc编译器编译
来源:互联网 发布:邵长文免费算命软件 编辑:程序博客网 时间:2024/05/19 14:36
1.今天学习了gcc编译器,gcc编译器编译为四个过程,分别为预处理,编译,汇编,链接。以hello.c程序为例:
(1).预处理:对源程序中的伪指令(即以#开头的指令)和符号进行处理的过程。一般包括头文件展开,宏替换,条件编译。
执行命令:gcc -E hello.c > hello.i
经过预处理后可以得到hello.i的文件
在源代码前插入了stdio.h使整个程序变成937行。
(2)编译:将预处理完的文件进行语法检查,词法分析。
执行命令:gcc -c hello.c
经过编译可以得到hello.o目标文件
(3)汇编:将汇编代码转变成机器可以执行的命令,每一条汇编语句几乎都对应一条机器指令。
执行语句:gcc -S hello.c
经过汇编会生成hello.s的汇编文件
(4)链接:将各个目标文件组装在一起,生成可以执行的文件,并且文件名可以自己命名。
链接过程包括按序叠加,相似段合并,符号地址的确定,符号解析与重定位,指令的修正,全向构造与解析等等。
2.gcc的优化选项
(1)-O1优化:该模式下对于一个大的函数或功能会花费更多的时间和内存,编译会尝试减少代码体积和代码运行时间。但是并不执行会花费大量时间的优化操作。
(2)-O2优化:并不执行循环展开和函数“内联”优化操作,与-O1相比较-O2将会花费更多的编译时间,当然也会生成性能更好的代码。
(3)-O3优化:更进一步优化。-O3打开-O2指定的所有优化操作并且打开-finline-functions -funswitch_loops
-fgcse-after_relead优化项。
3.库:提供一些可以直接拿来用的变量函数,但是不能看到其具体的实现过程。库分为静态库和动态库两种。
(1)静态库:是在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行,后缀名为 .a。
静态库会整合到程序中,这样会使我们的程序臃肿,体积较大,运行时比较占内存,编译效率低,而且不易升级,但是我们可以对其进行较好的布局,从而提高执行效率。
(2)动态库:是在执行程序启动时加载到执行代码中 后缀名为 .so。
动态库只有在使用它的程序执行时才会使用,这样就会使我们的程序轻便,运行时占用内存少,编译较快,而且容易升级,但是我们很难对其进行较好的布局,从而降低其执行效率。
- GCC编译器编译过程
- gcc编译器编译
- GCC编译器的编译参数
- gcc编译器编译c++程序
- 深入浅出编译原理-2-gcc编译器概览
- [编译器] GCC编译过程 [ISO -> -ESc]
- 嵌入式Linux编译器GCC编译流程
- gcc编译与vc编译器区别
- linux下编译器gcc/g++编译步骤
- linux下编译器gcc/g++编译步骤
- 编译c程序时 gcc编译器
- linux gcc编译器的编译过程
- 通过GCC编译器编译c语言
- 深度剖析“GCC编译器编译过程”
- Keil5配置GCC编译器编译STM32工程
- gcc编译器实验---对gcc编译参数的详细说明
- gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接
- gcc编译器
- POJ1961(KMP-Next数组)
- 161029
- jdk和jre的关系及环境变量的用途
- 博客项目知识点回顾
- SCAU8615 快乐
- gcc编译器编译
- 目录
- svmlight使用总结
- Struts2——Struts2框架的深入了解
- NOIP2015DAY2T1【跳石头】
- 进程2
- edu邮箱怎么申请一个1T的onedrive
- 使用Raspi-config配置工具来设置树莓派
- 双项映射一对多关联关系