.lib是编译后的目标代码(即.obj集合),相当于你平时编译程序时每个.cpp对应的.obj文件,是人无法阅读的,编译为本机非托管.exe程序的时候,是链接器(link.exe)把程序用到(在make file中指定)的所有相关.obj和.lib组合成.exe文件,后者才是所谓的二进制可执行文件。你打开自己写的程序的.obj文件看看,你看得到什么?
老式的非托管程序.exe,和新式的.net平台托管.exe,是完全不同的两回事,后者是伪代码,操作系统启动对应的.dll执行这些编译后的代码,在有需要时再临时编译为二进制机器码再执行,故后者的.exe比前者的.exe尺寸小得多,但执行较慢,因为有时需要临时编译(此即JIT机制)以及间接执行(仿似以前的解释语言),但这也是Java平台所采取的策略,这样是跨系统的(.NET比Java优越之处是它不局限在Java框架之下而允许多语言、多程序集联合解决方案)。
这就是我常常说你们现在总学老式的那种内嵌式编译程序原理,在将来会妨碍使用新手段的原因。固化了这种思维,将来再转过来就很艰难了,等微软像淘汰Win95/98那样彻底淘汰XP的时候,你就知道现在所学的东西有多少是会被废弃的。