
在我们正式开始前,让我们回想一下,C语言编程的一般顺序是什么?
1.源代码
2.编译,链接,运行
3.调试,发布
无论在不同的系统环境还是不同的集成开发环境下,C语言编程都是上面的这个顺序。
很多集成开发环境很善解人意的把第2步直接变成一个按钮,或者Ctrl+F5快捷键,一键完成这几个步骤。初学者看不到这块的内容,不知道这一块的内容,只知道这是一个按钮就可以完成的事。但是编程的本质没变,只是被隐藏了而已。
编译(Compile)和链接(Link)是C语言,甚至大部分语言从源代码到可执行程序都必须经历的两个步骤。大部分程序都不是用一个源文件写出来的。编译先针对单独源文件进行处理。链接是把编译处理的文件和库链接成一个完整的可执行文件。
C/C++语言的完整编译过程是:
一、预编译
处理#define #if #include这类#开头的语句,这些称为预编译指令。
这个过程中会把.h文件和.c/.cpp文件组合成最终交给编译过程的源文件。这个源文件是不包含任何预编译语句的。所有#define定义的宏也会被替换。
二、编译
把预编译处理后的源文件编译成.o或.obj文件,称为目标文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。
三、链接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外链接过程还会组合一些其他数据,比如资源、可执行文件头等等。
注:头文件不属于compile和link过程,头文件是预编译过程的文件。
编译时,编译器只检测程序语法,检查变量,函数等是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error)。
======================================
Linux下的C编程,这会是一系列的文章。
每篇文章的内容不多,但力求简单易懂。
本文链接地址: Linux Programming, Language C 0 – GetStarted
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。