过程
c++程序生成可执行文件的过程:源文件(.cpp),经过预编译,生成编译单元;编译单元,经过编译、汇编,生成目标文件(obj);程序内所有目标文件,经过链接,生成可执行文件。
预编译: 对#include #define进行文本替换,一个cpp文件(.c)文件与它相应的.h文件共同组成了一个编译单元。
编译: 在确认所有指令符合语法规则之后,将一个编译单元内文本形式的源代码翻译为等价的中间代码或者汇编代码。
还要经过优化,包括对中间代码的优化还有针对目标代码的生成进行的优化。
汇编: 将汇编语言代码翻译成目标机器指令的过程,生成目标文件。目标文件主要包含代码段(可读可执行)与数据段(可读可写可执行)。
链接: 将obj文件、操作系统的启动代码还有用到的库文件进行组织,形成最终可执行代码的过程。分为静态链接、动态链接。
静态链接: 将代码从静态链接库中拷贝到最终的可执行程序中。静态链接库实际上是一个目标文件的集合。
动态链接:不进行拷贝,只在最终的可执行程序中记录下动态链接库或者共享对象的名字以及其他少量的登记信息。在执行时,动态链接库中的内容被映射到运行时进程的虚地址空间,根据登记信息找到对应的函数代码。
动态链接使得最终的可执行文件比较短小,并且共享对象被多个进程使用时能够节约内存。但也有可能带来一些性能上的损失。
错误类型: