2010-09-15 286 views
3

这是一个特定的gcc相关问题。我有一个用g ++ 4.1.2编译的库,我想给用户。用户可以在他们的代码中使用我们的API并链接我们的库来创建最终的可执行文件。g ++版本兼容性

我的问题与g ++版本兼容性有关。我们的一些用户正在使用g ++ 4.4.3,其他4.3.3,还有其他的4.2.1。用4.1.2编译的库是否与所有这些g ++版本兼容?我的猜测是他们应该是因为他们是ABI兼容的。但是我们的一些客户不同意。我真的不想运送同一个库的四个不同版本。如果它们不相容,是否有一个具体的原因或者是否有办法避免不兼容?

回答

2

总之,是的。如果您的应用程序不使用新GCC的功能,则可以使用较旧的GCC进行编译。使GCC向后兼容,使用旧版GCC库构建的应用程序不会在新版本上打破。

4

只要它们使用相同的ABI(应用程序二进制接口),两个库就相互兼容。据我所知,上一次海湾合作委员会正式更改ABI时使用的是v3.3或v3.4。

但是,这仅适用于兼容的代码。任何依赖无证或未指明行为的来源可能会在未经通知的情况下中断。

所以答案是:你的编译器版本都是兼容的;问题是源代码是否是。

+0

用户“Employed Russian”指出:“......在GCC 4.2.1附带的libstdC++。so.6.0.9中存在不兼容性。”感谢您的附加组件。 – DevSolar 2010-09-21 15:02:26