1、预处理(进行宏替换)
a、去注释 b、头文件展开 c、条件编译 d、宏替换
-E 选项,告诉gcc,从现在开始进行程序的翻译,将预处理工作做完之后就停下来
2、 编译(生成汇编)
-S 从现在开始进行程序的翻译,将编译工作做完,停下来
3、汇编(生成机器可识别的代码)
- c 从现在开始进行程序的翻译,将汇编工作做完,停下来
可重定位目标二进制文件,简称目标文件,.obj文件。
不可以独立执行,虽然已经是二进制了,需要经过链接才能执行。
4、链接(生成可执行文件或库文件)
将可重定位目标二进制文件和库进行链接形成可执行程序。
5、库
Linux: . so (动态库) . a(静态库) 库有自己的命名规则的: libname.so.XXX
6、方法的实现就是在库当中!
库其实就是把源文件(.c),经过一定的翻译,然后打包 --- 只提供一个文件即可,不同提供太多的源文件,也可以达到隐藏文件的目的
头文件提供方法的声明,库文件提供方法的实现+代码 = 软件
7、. o 文件 和库是如何链接的
a、 动态链接
在Linux中, 编译形成的可执行程序,默认采用的是动态链接 --- 提供动态库
b、 静态链接
在Linux中,如果要按照静态链接的方式,进行形成可执行程序,需要添加 -static选项 --- 提供静态库。
8、动 VS 静
a、动态库因为是共享库,有效的节省资源(磁盘空间,内存空间,网络空间等)【优】动态库一旦缺失,导致各个程序都无法运行【缺点】
b、静态库,不依赖库,程序可以独立运行【优点】,体积大,比较消耗资源【缺点】
9、debug && releas
a、debug 可以呗追踪调试,形成可执行程序的时候,添加了debug信息