gpt4 book ai didi

c++ - g++ 总是向后兼容 "older"静态库?

转载 作者:IT老高 更新时间:2023-10-28 22:35:56 26 4
gpt4 key购买 nike

我有一些静态库,但我不是其所有者,它们是用旧版本的 g++ 4.3.2 编译的(c++11/c++0x 未激活)。

当我使用 g++ 4.6(没有 c++11)编译我的代码并使用 g++ 4.6 将其与这些链接时静态库,它链接很好,我似乎在运行时没有遇到任何问题(虽然没有测试一切)。我倾向于认为前向兼容性是可以的。

现在我想用 gcc 4.8 和 c++11 编译我的代码,并且仍然将它与那些相同的、未重新编译的静态库链接。

g++ 中的 ABI 更改是否只是链接向前兼容性的问题,还是也可能出现向后兼容性问题?

最佳答案

用于 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::pairstd::list 中存在 ABI 不兼容问题,已在 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代码不需要重新编译)

关于c++ - g++ 总是向后兼容 "older"静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com