在Ubuntu 15.10上使用g ++ - 4.9进行编译时运行时错误[abi:cxx11]

时间:2016-03-22 15:44:09

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

我最近更新了Ubuntu从15.04到15.10。这些版本之间的主要区别之一是从gcc-4.9更新默认gcc版本 - > 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

任何可以帮助我的想法?

1 个答案:

答案 0 :(得分: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(< 5.1.1-20)仅提供经典的libcxx98 ABI) 。坏消息是经典的libcxx98 ABI中的(实验性)C ++ 11支持和新的稳定的l​​ibcxx11 ABI不兼容,上游除了重建之外没有提供升级路径

没有捷径。