用更新的GCC版本替换GCC的系统级C ++运行时是否安全?

时间:2010-07-30 02:42:08

标签: c++ linux gcc

Linux C ++程序使用针对libgcc_s.so.1libstdc++.so.6库的GCC链接构建,每个库包含多个ABI:较新版本包含先前版本的ABI和新版本的ABI。 GCC ABI policy document表示针对旧运行时构建的程序应该能够与新运行时一起运行。因此,从理论上讲,较旧的二进制文件应该可以在新系统上运行。

如果我的系统具有较旧的运行时并且不想在此系统上遇到升级GCC的麻烦,我可以手动用新的库替换上面提到的库吗?从理论上讲,与之相关的所有旧的可执行文件都应该可以工作(包括GCC本身),但它感觉就像一个kludge。

这样做是否安全?

1 个答案:

答案 0 :(得分:4)

也许,但我不推荐它,至少在没有广泛测试的情况下,几乎肯定会吃掉任何收益。原因如下:

  • “ABI兼容”不一定是“bug兼容”。即使保持了ABI兼容性,如果他们以某种方式依赖于以前版本的库中不正确的行为,您的应用程序仍可能以惊人的方式中断。
  • 可能会出现新的错误,这些错误最终会破坏您的应用,而且不会与ABI不兼容。
  • 如果您没有完全正确编译 ,那么他们可能 不能兼容ABI。
  • 您确定原始库是从原始GNU源编译的吗?也许有一些你不知道的补丁。如果您无法确定,则无法确定现有系统/应用程序的兼容性。

你的目标是什么?如果您只是希望能够编译使用更新功能的C ++应用程序,您可以安装新版本的GCC和原始版本,您只需要确保您可能使用的所有库都是使用新版本构建的。