Windows下的exe和dll文件是COFF/PE文件格式的文件。
通过了解Windows的COFF/PE文件结构,
可以知道:
COFF/PE文件结构里有一个可选文件头。
在IMAGE_OPTIONAL_HEADER32可选头文件结构里BYTE类型字段MajorLinkerVersion创建可执行文件的链接器的主版本号。
对于Microsoft的链接器生成的PE文件,这个版本号与Visual Studio的版本号相一致。
BYTE类型字段MinorLinkerVersion表示创建可执行文件的链接器的次版本号。
使用vc6.0和vs2103编译一样的代码,用dumpbin.exe查看exe文件的结构比较如下图,
在可选文件头OPTIONAL HEADER VALUES里字段entry point对应的就是c运行时库连接的入口地址,
下图左边是vc6.0编译的,
有图是vs2013编译的,
可以看到vs2013编译的程序entry point版本@ILT+120(_wmainCRTStartup)跟vs2013的c运行时库版本msvcr120.dll是一致的,
可以知道,编译器在变以EXE、dll时,就在生成文件里包含了要连接c运行时库版本信息的: