I don't know why there should be different format object files. Couldn't they be much the same. And the linker finally decide how to link them to platform specific binary? MSVC perhaps has already get some idea of this kind, the link time code generation. I'm just curious why on the X86 arch , we get different object file formats just for platform specific.