C++的一点基本自我修养(一)

转眼自己也要加入找工作的队伍中去了,为了笔试和面试,提升下自己的C++基本修养吧,哎装啥装C++的一点基本自我修养(一)

    编译器和链接器

源文件是使用C++这种高级程序设计语言编写的,以便于人们编写、阅读和维护。但计算机不理解高级语言,所以集成开发环境(这里以Visual Studio为例)的职责是将源程序翻译成计算机能够解读运行的目标语言(target language)。目标语言通常是汇编语言或目标机器的目标代码(object code),有时也称为机器代码(machine code)。通过VS的努力计算机能看懂C++程序,就可以按照源文件中的指令执行相应的动作。

编译器完成程序的编译工作后,程序还只是一些目标文件,还需要链接器将一个或多个由编译器编译生成的目标文件和库函数链接成可执行文件,这样才能诞生一个可执行的C++程序,如下图。

C++的一点基本自我修养(一)

首先,我们的设计师--你--在Visual Studio中用C++语言编写我的源代码(source code),这些源代码是.cpp文件;然后源代码经过预处理器(proprcessor)处理,执行源文件中的预编译指令,例如,展开源代码中的宏,引入相应的头文件等。接着,编译器开始工作,把预处理后的源文件编译成目标代码,形成目标文件。在Windows系统下,目标文件的扩展名一般是.obj。

VS集成的编译器是“cl.exe”,可以在VS的命令窗口中手动执行cl命令,让编译源文件得到目标文件。例如,可以通过下面的命令编译HelloWorld.CPP得到HelloWorld.obj目标文件。

cl  /EHsc HelloWorld.cpp

虽然目标文件中记录了计算机可以读懂的机器语言指令,但是这些目标文件还不能执行。C++程序通常由多个源文件组成,经过编译后形成多个目标文件,这些目标文件还需要最后组装成一个可执行程序。此外,程序一般会引用基本的库函数,因此在执行程序之前还要把库函数用定义好的目标代码替换。组装和替换目标文件的过程称为链接,也就是链接器的工作。

在VS中,链接器是“link.exe”。在VS的命令行窗口中,你可以通过下面的命令让链接器链接目标文件HelloWorld.obj,得到可执行的HelloWorld.exe文件。

link HelloWorld.obj

一旦生成可执行文件,就可以给操作系统下达指令让文件运行。操作系统接收到命令之后,首先要创建相应的进程并分配私有的进程空间,加载器负责把可执行文件的数据段和代码段映射到进程的虚拟内存空间中,并加载所链接到的库函数。然后,操作系统开始初始化所定义的全局变量,自动调用全局对象的构造函数。最后,才进入入口点函数,程序开始执行。

C++的一点基本自我修养(一),布布扣,bubuko.com

C++的一点基本自我修养(一)

上一篇:c++文件操作总结


下一篇:详解muduo多线程模型