混合编译器

use*_*986 8 c++ gcc dynamic-linking

我想知道是否可以将使用gcc4.2编译的c ++程序与在gcc4.5之类的更高版本中编译的共享c ++库链接起来.

我试过这样做,但遇到了一些不同的问题.在编译共享库gcc5.3时,我收到一条消息说:

*"malloc:对象0x7fff707d2500的错误:未被分配的指针在malloc_error_break中设置了一个断点来调试"*.

如果我尝试用gcc4.6编译共享库,我会得到非常奇怪的行为.std :: stringstream类无法正常工作.写入流后,结果字符串为空.

是否有可能做到这一点?或者我在尝试一些不可能的事情?我希望这是可能的,因为我正在动态链接lib.顺便说一句,我在MacOSX上运行.

BR

Dam*_*mon 5

从gcc 3.0开始,g ++遵循Itanium ABI,因此理论上应该没有问题.但是,g ++ 4.2具有CXXABI_1.3.1而g ++ 4.5具有CXXABI_1.3.4(参见此处).所以我要小心.如果没有差异,一个不会提升修订号.

此外,glibc ++在这些版本之间经历了5次修订,这可能是你看到std::stringstream做有趣事情的一个原因.

最后,存在许多配置选项(例如使字符串完全动态化或不完全动态化)直接影响标准库的行为和兼容性.给定两个(随机,未知)构建,您甚至不知道它们具有相同的配置选项.