笔记整理:关于C和C++的编译、连接过程
2012-12-04 14:22
309 查看
笔记整理:关于C和C++的编译、连接过程
最近感觉C和C++的编译和连接过程有些难以理解。在此整理笔记,以理清思路。每一个程序都是经过编译和连接后生成可执行文件的。编译过程由编译器实现。而连接过程由连接器实现。
编译
在编译过程中,每一个源文件都是一个编译单元。编译器会检查语法错误,并且检查函数和变量是否声明以及声明是否正确。编译后每一个源文件产生一个后缀名为.obj或者是.o的文件。它们是生成的可执行的机器代码(二进制文件)。其中Windows系统为.obj,Unix系统为.o。若是源文件太多,为便于管理,会将生成的二进制文件打包,Windows生成.lib文件,Unix生成.a文件。
对于函数和变量的声明,程序员需要告诉编译器头文件在哪里。注意到编译器是以源文件作为内存单元的,那么头文件就显得相当重要。因为编译器得到的一切关于源文件的信息都来自于本文件,那么头文件就成了含有外部文件信息的通道。(头文件一般只有声明,定义放在.c或者.cpp文件中)若是函数没有声明,编译器只会产生一个警告,但是会通过编译,即生成相应的Object文件(即中间目标文件)。
连接
连接会把生成的中间目标文件连接起来,生成可执行文件。连接时主要连接函数和全局变量,连接器并不管函数所在源文件,只管函数的中间目标文件。如果在连接时找不到函数或变量,就会报错(如上面提到的没有声明的情况)。而若是写一些比较大型的程序,函数很可能出现重名的情况。这时连接时会产生一些意想不到的情况。这也是C++中使用命名空间的原因。在今后的学习中,一定会对此有所了解。
相关文章推荐
- c/c++程序编译连接过程
- linux系统c++编译连接过程,动态库与静态库
- C++编译连接过程
- C&C++编译连接过程
- c/c++程序编译连接过程
- c/c++程序编译连接过程
- C++编译连接过程(转)
- C & C++的编译过程详解 (整理在此方便以后)
- 关于VS2008编译连接过程中出现重定义的问题
- [c++笔记]关于编译
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- c/c++程序编译连接过程
- C++编译过程(笔记)
- C++学习笔记--GCC编译过程
- c/c++程序编译连接过程
- 关于全志A20的Ubuntu12.04 64位系统下环境配置及编译过程笔记
- 关于全志A20的Ubuntu12.04 64位系统下环境配置及编译过程笔记【转】
- C++ 程序编译连接过程(VC)
- 菜鸟C++精髓学习笔记--C++程序内部执行过程(预处理、编译、链接过程的作用)
- C++学习体会--预处理,编译过程,连接过程