4

我有一个巨大的 C++11 项目,其中包含诸如功能之类的插件。我的项目有一些库(用 gcc 4.6.3 编译)、一个前端(用 gcc 4.6.3 编译)和一些插件(用 gcc 4.7 编译)。插件通过库加载dlopen并引用内容。

我的项目使用模板、typeinfo、shared_ptr、stl 容器等。

当我使用相同版本的 gcc 编译所有内容时,一切运行正常。当我按照我描述的方式编译(4.6.3 中的库和前端以及 4.7 中的插件)时,我开始面临问题。

我不确定发生了什么,我希望你能给我一些线索并帮助我解决这个问题。

4

2 回答 2

4

来自http://gcc.gnu.org/gcc-4.7/changes.html

GCC 版本 4.7.0 和 4.7.1 对 C++ 标准库进行了更改,这影响了 C++11 模式下的 ABI:向 std::list 添加了一个数据成员,更改了它的大小并更改了一些成员函数的定义,以及std::pair 的移动构造函数非常重要,它改变了带有 std::pair 参数或返回类型的函数的调用约定。GCC 4.7.2 版本的 ABI 不兼容问题已得到修复,但因此使用 GCC 4.7.0 或 4.7.1 编译的 C++11 代码可能与使用不同 GCC 版本和 C++ 编译的 C++11 代码不兼容使用任何版本编译的 98/C++03 代码。

我遇到了 std::list<> 的问题

于 2012-11-15T08:36:47.447 回答
4

G++ 4.64.7 兼容,尽管人们在这里声称,只要在运行时使用来自用于构建任何对象的最新版本的 libstdc++.so。

但是对于 C++11,由于支持仍在不断发展,因此保证较少(直到最近 C++11 也是如此!)所以我们无法避免进行一些不兼容的更改以改进 C++11 支持。

如需更完整的答案,请在 gcc-help 邮件列表中发布您的问题的详细信息,我将对其进行调查

于 2012-05-29T20:10:48.660 回答