【问题标题】:Configuring GCC for GCC 4 compatibility为 GCC 4 兼容性配置 GCC
【发布时间】:2018-12-17 03:26:37
【问题描述】:

我需要使用较新版本的 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 的情况下编译它会导致错误或减少功能集。为什么不能编译当前版本的所有库?
  • 因为我正在为只有 GCC 4.8 的发行版进行编译。重新编译整个系统不是一种选择。 AFAIK 如果您链接的所有库也使用旧的 libstdc++ ABI(这是我的情况),那么旧的 libstdc++ ABI 应该没有任何问题。您将只使用 std::string 和 sts::list 的旧实现。无论如何,我问的是语言 ABI,而不是 libstdc++ ABI。
  • 在这种情况下,我建议您并行安装旧编译器,并将其用作您维护的旧系统的交叉编译器。混合需要不同 ABI 的代码不是一个好主意。但是如果你说你需要使用需要更改 ABI 的 C++14 并且想在不能使用此 ABI 的系统上运行它,你根本无法继续!
  • 但是 -fabi-version 选项 (gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html) 不是我需要的吗?它允许较新版本的 GCC 使用旧 ABI 进行编译,还是我遗漏了什么?
  • 但是如果您使用需要新 ABI 的新功能,它就无法工作。您尝试使用需要新 ABI 的 c++14。那么,如果编译器无法将所需的信息放入目标文件中,它应该如何工作呢?

标签: c++ gcc


【解决方案1】:

正如@Goswin von Brederlow 所说,使用各种 gcc 很棘手。您应该将 gcc 4.8 与 -std=c++1y 一起使用,以便按照建议使用 C++14 here

【讨论】:

    【解决方案2】:

    不要。问题太多了。

    最好安装或构建 gcc-4.8。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2013-04-17
      • 1970-01-01
      • 2016-06-22
      • 2013-01-25
      • 2021-11-27
      • 2018-01-07
      相关资源
      最近更新 更多