1

我最近将 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

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

4

1 回答 1

1

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

参见例如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 不兼容,并且上游不提供除了重建之外的升级路径

没有捷径可走。

于 2016-03-22T15:47:49.987 回答