比如有个模板函数是ad(),某个编译单元以int类型和float类型实例化了该模板函数,那么该编译单元的日标文件中就包含了两个该模板实例的段。...这样,当别的编译单元也以int或foat类型实例化该模板函数后,也会生成同样的名字,这样链接器在最终链接的时候可以区分这些相同的模板实例段,然后将它们合并入最后的代码段。...C++与ABI
既然每个编译器都能将源代码编译成目标文件,那么有没有不冋编译器编译出来的目标文件是不能够相互链接的呢?...对于C语言的目标代码来说,以下几个方面会决定目标文件之间是否二进制兼容:
内置类型(如int、float、char等)的大小和在存储器中的放置方式(大小端、对齐方式);
组合类型(如 struct、 union...很多时候,库厂商往往不希望库用户看到库的源代码,所以一般是以二进制的方式提供给用户。这样,当用户的编译器型号与版本与编译库所用的编译器型号和版本不同时,就可能产生不兼容。