这是一个特定的 gcc 相关问题。我有一个用 g++ 4.1.2 编译的库,我想提供给用户。用户可以在他们的代码中使用我们的 API 并链接我们的库来创建最终的可执行文件。
我的问题与g++版本兼容性有关。我们的一些用户使用 g++ 4.4.3,其他用户使用 4.3.3,还有一些用户使用 4.2.1。使用 4.1.2 编译的库是否与所有这些 g++ 版本兼容?我的猜测是它们应该是这样,因为它们是 ABI 兼容的。但我们的一些客户不同意。我真的不想发布同一个库的四个不同版本。如果它们不兼容,有具体原因吗?或者有办法避免不兼容吗?
只要使用相同的 ABI(应用程序二进制接口),两个库就可以相互兼容。据我记得,GCC 上次正式更改 ABI 是在 v3.3 或 v3.4 中。
但是,这只适用于兼容代码。任何依赖未记录或未指定行为的来源可能会中断,恕不另行通知。
所以答案是:你的编译器版本都是兼容的;问题是源代码是否是。
简而言之,是的。如果您的应用程序不使用新 GCC 的功能,您可以使用旧版 GCC 安全地编译它。 GCC 被设计为向后兼容,使用旧版 GCC 库构建的应用程序不会在新版本上崩溃。