这个问题在这里已有答案:
我想问你关于目标文件(* .o,.obj)和静态库(.a,* .lib)。据我所知,静态库必须与编译器匹配,因此它们是特定于编译器的。这是真的吗?如果涉及到目标文件,它看起来如何?对象文件由binarny代码组成,因此很容易假设我可以将它们与所有compillers一起使用。我很期待你的回答。
据我所知,静态库必须与编译器匹配,因此它们是特定于编译器的。这是真的吗?
是的,这是真的。
对象文件由binarny代码组成,因此很容易假设我可以将它们与所有compillers一起使用。
静态库不是累积的.o
文件,因此没有其他规则适用于这些。
视觉工作室答案
对于视觉工作室,.lib
只是.obj
的容器,所以一个不会改变答案。
此外,LIB是否必须与编译器的特定版本匹配取决于。使用ltcg,它们必须匹配。没有它......这取决于。一个干净的c接口库可能适用于不同版本的编译器。当C ++ / STL进入混合时,事情可能会开始出错。所以最好的建议是使用相同的版本 - 不要冒险。你可能会暂时离开它,但除非你非常小心,否则你最终会绊倒。
通过相同的版本,通常相同的主要版本就足够了 - VS团队真的试图在次要版本更新中不破坏二进制compat
不知道.o或.a