GCC 4.7编译lib与GCC 4.6.3程序兼容吗?

我有一个巨大的C + + 11项目插件function。 我的项目有几个库(用gcc 4.6.3编译),一个前端(用gcc 4.6.3编译)和一些插件(用gcc 4.7编译)。 插件通过dlopen加载,并从libs中引用。

我的项目使用模板,typeinfo,shared_ptr,stl容器等东西。

当我编译与gcc相同版本的所有东西时,一切运行正常。 当我按照我所描述的方式(4.6.3中的libs和frontend和4.7中的插件)编译时,我开始面临问题。

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

G ++ 4.6与4.7兼容,不管人们在这里声明什么,只要在运行时使用libstdc ++。就可以使用最新版本来构建任何对象。

但是对于C ++ 11而言,由于支持仍在不断发展(至今为止,C ++ 11也是这样),因此我们无法避免做出一些不兼容的更改以提高对C ++ 11的支持。

有关您的问题的更详细的答案发送到gcc-help邮件列表,我会研究它

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 ++ 11代码不兼容,并且与C ++ 98 / C ++ 03代码与任何版本编译。

我有std :: list <>的问题