代码由源代码(.c)到可执行文件(.exe)的转换过程
代码由源代码(.c)到可执行文件(.exe)的转化过程,有以下几步:
- 预处理器在预处理阶段将源代码(.c) 转为预处理文件(.i)
- 编译器在编译阶段将预处理文件(.i) 转为汇编文件(.s)
- 汇编器在汇编阶段将汇编文件(.s) 转为目标文件(.o)
- 链接器在链接阶段将目标文件(.o) 转为可执行程序(.exe)
动态链接与静态链接
静态链接
静态链接:链接器在链接阶段将各种库文件和相关文件集成到可执行文件中,在windows下静态链接库以.lib结尾,linux下以.a结尾
静态链接的优点:
1)装载速度很快,运行速度比动态链接快;
2)只需要开发人员在开发机上有完整的.lib文件,不需要在用户机器上有完整的.lib文件,自完备
静态链接的缺点:
1)可执行文件很大,并且相同代码很多,资源浪费
动态链接
动态链接:动态链接是把链接过程在运行时进行,动态链接在可执行文件装载或运行的时候,由操作系统的装载程序加载库文件,windows下以.dll结尾,也有.lib的,但是这个是叫做导入库,和静态链接的不一样,linux下以.so结尾
动态链接的优点:
1)可执行文件很小;
2)适合大规模软件开发,开发过程耦合度小、独立,便于不同开发人员和开发组织开发;
3)不同编程语言按照约定可以使用同一套.dll库;
4)dll文件与exe文件独立,如果输出接口相同,更换dll文件不会对exe文件产生影响,可拓展性和可维护性好
动态链接的缺点:
1)速度没有静态链接快;
2)不具有自完备,如果用户机器中没有.dll文件,程序将无法运行并且报错