【问题标题】:Runtime error [abi:cxx11] when compile with g++-4.9 on Ubuntu 15.10在 Ubuntu 15.10 上使用 g++-4.9 编译时出现运行时错误 [abi:cxx11]
【发布时间】:2016-07-09 14:36:11
【问题描述】:

我最近将 Ubuntu 从 15.04 更新到 15.10。这些版本之间的主要区别之一是默认 gcc 版本从 gcc-4.9 -> gcc-5 的更新。我正在开发的库是为 gcc-4.9 编写和编译的,并且依赖于仅在 gcc-4.9 中工作的其他库。

我已经在我的电脑上安装了 gcc-4.9,我可以成功编译库和我的源文件。但是,当我尝试运行生成的程序时,出现此错误:

terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]'
what():  basic_ios::clear: iostream error
Aborted (core dumped)`

源代码和我在此处尝试阅读的文件在升级之前可以正常工作。我曾尝试使用 -D_GLIBCXX_USE_CXX11_ABI=0 标志,但我不确定这是正确的做法,也不起作用。

这是我当前包含在我的 makefile 中的标志示例:

CPPFLAGS = -O0 -g3 -Wall -c -fpermissive -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++0x -fPIC -MMD -MP

有什么想法可以帮到我吗?

【问题讨论】:

标签: c++ c++11 gcc4.9 ubuntu-15.10 gcc5


【解决方案1】:

您“只需要”重新编译所有程序所需的 C++。

参见例如the Debian wiki on the transision,其中有(除其他外)

好消息是,GCC 5 现在提供了稳定的 libcxx11 ABI,以及对 C++11 的稳定支持(5 之前的 GCC 版本称为此支持的实验性版本)。这需要对 libstdc++ ABI 进行一些更改,现在 libstdc++6 提供了双 ABI,即经典的 libcxx98 ABI,而新的 libcxx11(GCC 5 (

没有捷径。

【讨论】:

  • 如果我想继续使用gcc-4.9也是这样吗?
  • 你所有的系统库都是 gcc-5(和 g++-5)编译的,所以它可能很难避免。但是可以,但是坚持使用 g++-4.9(和 C 系统库)可以避免这种情况。
  • 好的,谢谢。这是否解释了为什么当我使用 4.9 进行编译时出现 [abi:cxx11] 错误?
  • 这是递归的玩笑吗? ;-) 是的。正如你已经问过的。是的,正如我试图回答的那样。您应该能够使用两个文件的项目进行复制,或者可能是一个 main() 加上一个最小的库。
猜你喜欢
  • 1970-01-01
  • 2016-11-20
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 2021-02-19
相关资源
最近更新 更多