为GCC配置GCC 4兼容性

5

我需要使用更新版本的GCC(7.3.1)来链接那些由GCC 4.8编译的库。对于libstdc++ ABI,我只需要设置_GLIBCXX_USE_CXX11_ABI=0宏,但是语言ABI(-fabi-version)呢?我需要将-fabi-version设置为与旧编译器使用相同的版本,还是-fabi-compat-version?谢谢。


据我所知,将所有这些混合在一起实际上并不可能。如果您使用STL,则需要新的ABI才能运行所有功能。启用旧ABI编译它将导致错误或功能集减少。为什么不能使用当前版本编译所有库? - Klaus
因为我正在编译发布,而只有GCC 4.8可用。重新编译整个系统不是一个选项。据我所知,如果您链接的所有库也使用旧的libstdc++ ABI,则旧的libstdc++ ABI不应该存在任何问题(这是我的情况)。您将只使用旧版本的std::string和sts::list实现。无论如何,我询问的是语言ABI,而不是libstdc++ ABI。 - equeim
在这种情况下,我建议您并行安装旧的编译器,并将其用作您维护的旧系统的交叉编译器。混合需要不同 ABI 的代码不是一个好主意。但是如果您说您需要使用需要 ABI 更改的 C++14 并且想在无法使用此 ABI 的系统上运行它,则无法继续! - Klaus
但是,-fabi-version选项(https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html)不就是我需要的吗?它允许较新版本的GCC使用旧的ABI进行编译,或者我漏掉了什么? - equeim
但是如果您使用需要新ABI的新功能,则无法正常工作。您尝试使用需要新ABI的c++14。那么,如果编译器无法将所需信息放入对象文件中,该怎么办呢? - Klaus
文档中的-fabi-version选项描述没有提到任何C++14功能,只有错误修复。 - equeim
2个回答

1

正如 @Goswin von Brederlow 所说,使用各种不同的 gcc 版本是有技巧的。建议您使用 gcc 4.8 并加上 -std=c++1y 以使用 C++14,具体可参见 这里


0

不要这样做。会有太多问题。

最好安装或构建gcc-4.8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接