C++98 代码的 G++ ABI 向后兼容,一直到 GCC 3.4
因此,如果您使用 GCC 4.8 编译和链接您的最终可执行文件,您可以链接到使用 GCC 3.4 到 4.8(但不是更新版本)构建的对象和库
C++11 ABI 与 C++98 ABI 相同,C++98 和 C++11 通用的标准库类型具有相同的定义,(忽略 GCC 4.7.0 和 GCC 4.7。 1,在 C++11 中std::pair
和使用时存在 ABI 不兼容问题std::list
,已在 4.7.2 及更高版本中修复),因此您可以将 C++98 和 C++11 代码链接在一起(除非 C++11 代码使用 GCC 4.7.0 或 4.7.1 构建)
然而,一些 C++11 库类型还不稳定,并且在不同版本之间会发生变化,例如,因为它们在最终 C++11 标准之前首次发布,并且必须进行更改以匹配最终规则。所以混合使用 GCC 4.6 构建的 C++11 代码和使用 GCC 4.8 构建的 C++11 代码不一定安全
对于您的情况,所有 C++11 代码都是使用 GCC 4.8 构建的,这没问题。如果您升级编译器,您应该使用较新的 GCC 重新构建所有 C++11 代码以确保安全。(无需重新编译 C++98/C++03 代码)