对于一个基本的C++程序一般的运行过程如下
预处理:主要是头文件的展开,宏的展开
编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言
汇编:汇编语言转化为机器语言的过程
链接:针对一些库进行调用,如一些静态库和,然后组合到目标文件中
注意:对于静态库程序在编译链接的时候把库的代码链接到可执行文件中。
而对于共享库,链接后文件仅仅包含入口地址,而不是外部函数所在目标文件的整个机器码。程序运行前要通过
动态链接
,使外部函数机器码由操作系统从磁盘复制到内存中
常见的一些gcc命令:
选项名 |
作用 |
-o |
产生目标(.i、.s、.o、可执行文件等) |
-c |
通知gcc取消链接步骤,即编译源码并在最后生成目标文件 |
-E |
只运行C预编译器 |
-S |
告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为.s |
-Wall |
使gcc对源文件的代码有问题的地方发出警告 |
-Idir |
将dir目录加入搜索头文件的目录路径 |
-Ldir |
将dir目录加入搜索库的目录路径 |
-llib |
链接lib库 |
-g |
在目标文件中嵌入调试信息,以便gdb之类的调试程序调试 |