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

Ale*_*x B 5 c++ linux gcc

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

如果我的系统具有较旧的运行时,并且不想在该系统上升级GCC的麻烦,是否可以用新的库手动替换上述库?从理论上讲,所有链接到它的旧可执行文件都应该起作用(包括GCC本身),但这听起来像是一团糟。

这样做安全吗?

Nic*_*ght 5

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

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

你在这里的目标是什么?如果您只想编译使用更新功能的 C++ 应用程序,您可以在原始版本的旁边安装新版本的 GCC,您只需要确保您可能使用的所有库也是用新版本构建的。