g++ 版本兼容性

Posted

技术标签:

【中文标题】g++ 版本兼容性【英文标题】:g++ version compatibility 【发布时间】:2010-09-15 14:43:30 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

只要使用相同的 ABI(应用程序二进制接口),两个库就可以相互兼容。据我所知,GCC 上一次正式更改 ABI 是使用 v3.3 或 v3.4。

但是,这仅适用于兼容代码。任何依赖于未记录或未指定行为的来源都可能中断,恕不另行通知。

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

【讨论】:

用户“Employed Russian”指出“......在 GCC 4.2.1 附带的 libstdc++.so.6.0.9 中存在不兼容性。”感谢您的插件。【参考方案2】:

简而言之,是的。如果您的应用程序不使用新 GCC 的功能,您可以使用旧 GCC 安全地编译它。 GCC 被设计为向后兼容,使用旧 GCC 库构建的应用程序不会在新版本上中断。

【讨论】:

以上是关于g++ 版本兼容性的主要内容,如果未能解决你的问题,请参考以下文章

提供者与Oracle客户端版本不兼容

该版本的 %1 与你运行的 Windows 版本不兼容。

提供程序与Oracle客户端版本不兼容

获得 c++11 - 兼容的编译器

Hadoop、Hbase、Hive版本兼容性

由于与64位版本的windows不兼容,怎么弄?