我想知道是否有可能将用gcc4.2编译的c++程序与一个共享的c++库连接起来,后者是在更高版本(如gcc4.5. )中编译的
我试过这样做,但遇到了一些不同的问题。在编译共享库gcc5.3时,我收到一条消息:
*"malloc:对象0x7fff707d2500的错误:未分配被释放的指针,在malloc_error_break中设置要调试的断点“*。
如果我尝试用gcc4.6编译共享库,我就会有非常奇怪的行为。std::working流类不能正常工作。结果字符串在写入流后为空。
有可能这样做吗?还是我在尝试一些不可能的东西?我希望这是可能的,因为我正在动态地链接库。顺便说一句,我正在MacOSX上运行。
BR
发布于 2011-07-04 21:28:39
从gcc 3.0开始,g++遵循Itanium ABI,所以理论上应该没有问题。然而,g++ 4.2有CXXABI_1.3.1,而g++ 4.5有CXXABI_1.3.4 (参见这里)。所以我会小心的。如果没有差异,就不会增加修订数。
此外,glibc++在这些版本之间进行了5次修订,这可能是您看到std::stringstream做有趣事情的原因之一。
最后,有许多配置选项(例如使字符串完全动态或不动态)直接影响标准库的行为和兼容性。给定两个(随机的、未知的)构建,您甚至无法知道它们具有相同的配置选项。
发布于 2011-07-04 23:01:56
根据我的经验,ABI兼容性意味着C++库可以彼此链接,而不存在任何问题。
但是,由于C++使用了如此多的内联函数,这并不意味着什么。
如果标准C++库使用所有内联函数或所有库函数,那么您可以使用与GCC的旧版本一起编译的代码和更新的版本。
但是它没有,库混合了内联和外部库代码。这意味着,如果在std::string或std::vector中更改了什么,那么旧GCC的内联代码与从新GCC链接的库代码不同步。
https://stackoverflow.com/questions/6575823
复制相似问题