C++编译过程(笔记)
2018-03-18 15:26
253 查看
C++编译过程
C语言的编译链接过程就是把源代码转换成在硬件上运行的程序。编译:把文本形式源代码翻译成机器语言形成的目标文件的过程
链接: 把目标文件、操作系统的启动代码和库文件组织起来形成可执行程序的过程。
1.编译
分为两个阶段:编译和汇编1.1 编译
进行词法和语法分析,将高级语言指令转换成功能等效的汇编代码,包含两个阶段:编译预处理,编译、优化阶段。编译预处理
对其中的伪指令和特殊符号做处理宏定义指令 #define
条件编译指令 #ifndef #ifdef #endif
头文件包含指令 #include
特殊符号
将.c文件转化成.i文件
使用的GCC命令:gcc -E
编译、优化阶段
通过预编译输出的文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。
将.c/.h文件转换成.s文件
使用的GCC命令:gcc -S
1.2 汇编
汇编过程就是把汇编语言翻译成目标机器指令的过程,生成目标文件。目标文件中存放的也就是与源程序等效的目标的机器语言代码。
目标文件由段组成,通常至少又两个段:
代码段:包换主要程序的指令。该段是可读和可执行的,一般不可写
数据段:存放程序用到的全局变量或静态数据。可读、可写、可执行。
将.s文件转化成.o文件
使用的GCC命令:gcc -c
2. 链接过程
由汇编程序生成的目标文件并不能立即就执行,还要通过链接过程。原因:
某个源文件调用了另一个源文件中的函数或常量
在程序中调用了某个库文件中的函数
链接程序的主要工作就是将有关的目标文件连接起来。
将.o文件转化成可执行的文件。
使用的gcc命令:gcc
总结
预编译处理(.c) -> 编译、优化程序(.s)->汇编程序(.obj、.o、.a、.ko) -> 链接程序(.exe、.elf、.axf等)这篇文章主要是参考一个博客所写,也可以说是内容精简过来的,如果要看具体的,深入学习,在参考中,我会给出链接,大家可以跳转学习。
参考
C/C++程序编译过程详解
相关文章推荐
- 笔记整理:关于C和C++的编译、连接过程
- 菜鸟C++精髓学习笔记--C++程序内部执行过程(预处理、编译、链接过程的作用)
- C++学习笔记--GCC编译过程
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- C/C++编译过程详解
- C++编译连接过程(转)
- C++ 编译,执行过程 具体解释。
- C & C++的编译过程详解 (整理在此方便以后)
- Ubuntu 12.04 编译安装 OpenCV2.4.8 过程笔记
- C/C++程序编译运行生成过程分析
- C++程序编译过程简介
- (转载) C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- C/C++程序编译运行生成过程分析
- pro_c_c++编译过程
- C++编译链接过程
- 巧用头文件,多文件编译少发愁|浅谈实用“StdAfx”|C++编译连接过程
- C/C++程序从编译到链接的过程
- [C/C++]_[初级]_[C语言编译过程]
- C++程序编译过程
- 深入理解java虚拟机阅读笔记四:java代码编译和执行过程