我最近更新了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
任何可以帮助我的想法?
答案 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支持和新的稳定的libcxx11 ABI不兼容,上游除了重建之外没有提供升级路径
没有捷径。