编译产品可移植性[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我想问你关于目标文件(* .o,.obj)和静态库(.a,* .lib)。据我所知,静态库必须与编译器匹配,因此它们是特定于编译器的。这是真的吗?如果涉及到目标文件,它看起来如何?对象文件由binarny代码组成,因此很容易假设我可以将它们与所有compillers一起使用。我很期待你的回答。

c++ compilation
2个回答
1
投票

据我所知,静态库必须与编译器匹配,因此它们是特定于编译器的。这是真的吗?

是的,这是真的。

对象文件由binarny代码组成,因此很容易假设我可以将它们与所有compillers一起使用。

静态库不是累积的.o文件,因此没有其他规则适用于这些。


-1
投票

视觉工作室答案

对于视觉工作室,.lib只是.obj的容器,所以一个不会改变答案。

此外,LIB是否必须与编译器的特定版本匹配取决于。使用ltcg,它们必须匹配。没有它......这取决于。一个干净的c接口库可能适用于不同版本的编译器。当C ++ / STL进入混合时,事情可能会开始出错。所以最好的建议是使用相同的版本 - 不要冒险。你可能会暂时离开它,但除非你非常小心,否则你最终会绊倒。

通过相同的版本,通常相同的主要版本就足够了 - VS团队真的试图在次要版本更新中不破坏二进制compat

不知道.o或.a

© www.soinside.com 2019 - 2024. All rights reserved.