当前位置:C++技术网 > 资讯 > VS编译器底层设计粗讲-cl.exe,.obj,link.exe工作运行

VS编译器底层设计粗讲-cl.exe,.obj,link.exe工作运行

更新时间:2016-01-15 22:58:49浏览次数:1+次

在32位windows平台下,微软引入了一种叫PE的可执行格式。作为win32平台的标准可执行文件格式,PE有着跟ELF一样良好的平台扩展性和灵活性。PE文件格式事实上与ELF同根同源,都是有COFF格式发展而来的。微软将其可执行文件格式命名为“Portable Executable”,从字面上看是希望这个可执行文件格式能够在不同版本的windows平台上使用。
"cl"是Visual C++的编译器,即"Compiler"的缩写(叫编译推进器更合适)。在windows命令行下,/c参数表示只编译,不链接,即将.c文件编译成.obj文件,而不调用连接器生成.exe文件。如果不加这个参数,cl就会在编译生成的.obj文件后将其与默认的C运行库链接,产生可执行文件.exe。
编译器编译源代码后生成的文件(.c文件)叫做目标文件(windows下是.obj文件,linux下是.o文件),目标文件从结构上来讲是已经编译后的可执行文件格式,只是还没有经过链接的过程,毕竟他是从cl.exe编译过来的。

当我们有两个目标文件时,是如何将它们链接起来形成一个可执行文件?这基本上就是链接的核心内容:静态链接。对于链接器(link.exe)来说,整个链接过程中,它就是将几个输入目标文件加工后合并成操作系统定义的可执行文件格式的可执行文件。对于中间的工程,我们暂不讨论。

具体的请看《Windows零基础入门:2.3 exe程序文件是如何生成的