设为首页 加入收藏

TOP

2.1.4 编译器和链接器
2013-10-07 14:09:46 来源: 作者: 【 】 浏览:62
Tags:2.1.4 编译器 链接

2.1.4  编译器和链接器

虽然我是Visual Studio创建的,但是实际上,我的老爸和老妈是Visual Studio集成的编译器和链接器。此外,Visual Studio提供的主要是编辑功能,可方便地编辑我的源代码。

我老爸编译器的工作是将高级语言C++(www.cppentry.com)翻译为低级语言(机器语言)。

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

编译器完成程序的编译工作后,程序还只是一些目标文件,还需要链接器将一个或多个由编译器编译生成的目标文件和库函数链接成可执行文件,这样才能诞生一个可执行的C++(www.cppentry.com)程序。下面再来回顾一下程序的诞生过程,如图2-6所示。

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

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

 
图2-6  我的编译器和链接器
  1. cl /c /EHsc HelloWorld.cpp 

其中,cl是编译源文件的指令,其后的参数(选项)用于指定编译器的行为。这里的"/c"表示只编译不连接;"/EHsc"指定编译器使用何种异常处理模型;最后一个参数HelloWorld.cpp是即将要编译的C++(www.cppentry.com)源文件。

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

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

  1. link HelloWorld.obj 
恭喜你亲手创建了一个HelloWorld.exe。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.1 标准的输入和输出对象 下一篇2.4.3 CodeProject和CodeGuru

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: