GCC 4.7编译的lib是否与GCC 4.6.3程序兼容?

时间:2012-05-29 19:51:42

标签: c++ linux gcc c++11

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

我的项目使用模板,typeinfo,shared_ptr,stl容器以及其他东西。

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

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

2 个答案:

答案 0 :(得分:4)

G ++ 4.6 与4.7兼容,尽管人们在这里声称,只要在运行时你使用libstdc ++。所以从用于构建任何对象的最新版本开始。

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

如需更完整的答案,请将您的问题详情发布到gcc-help邮件列表中,我会对此进行调查

答案 1 :(得分: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<>

的问题