編程編譯時生成的obj文件和exe文件本質(zhì)上有什么區(qū)別?
本質(zhì)上都是2進制代碼,但是obj沒有經(jīng)過鏈接的重定位,不是可執(zhí)行的代碼。
而且一個obj對應一個cpp編譯單元,里面的外部符號都沒解析出來。
比如a.cpp通過b.h使用了一個b.cpp里定義的函數(shù)func();那么a.cpp生成的obj里面只會有func()這個函數(shù)名的調(diào)用而已,也就是一個(對a.obj來說的)外部符號。
只有經(jīng)過鏈接成為了.exe,相應于a.obj里面的func()的調(diào)用才會更新成實際的b.obj里面的func()的實際地址。
對全局變量也是同樣的道理。