更换GCC'是否安全;s系统级C++;使用较新的GCC版本运行时? Linux C++程序用GCC链接建立在 LBGCCs上。所以1 和 LBSTDC++。所以6。< /Cl>库,每个库包含多个ABI:更新版本包含以前版本加新的ABIS。表示基于旧运行时构建的程序应该能够与新运行时一起运行。因此,理论上,旧的二进制文件应该可以在新系统上运行

更换GCC'是否安全;s系统级C++;使用较新的GCC版本运行时? Linux C++程序用GCC链接建立在 LBGCCs上。所以1 和 LBSTDC++。所以6。< /Cl>库,每个库包含多个ABI:更新版本包含以前版本加新的ABIS。表示基于旧运行时构建的程序应该能够与新运行时一起运行。因此,理论上,旧的二进制文件应该可以在新系统上运行,c++,linux,gcc,C++,Linux,Gcc,如果我有一个运行时较旧的系统,并且不想在这个系统上升级GCC,我可以手动用新的库替换上面提到的库吗?从理论上讲,所有与它相链接的旧可执行文件都应该工作(包括GCC本身),但它感觉像是一个乱七八糟的东西 这样做安全吗?可能吧,但我不建议这样做,至少在没有广泛测试的情况下,这样做几乎肯定会消耗任何收益。原因如下: “ABI兼容”不一定是“bug兼容”。即使保持了ABI兼容性,如果你的应用程序依赖于以前版本的库中不正确的行为,那么你的应用程序仍可能以惊人的方式崩溃 可能会有新的bug破坏你的应用程序

如果我有一个运行时较旧的系统,并且不想在这个系统上升级GCC,我可以手动用新的库替换上面提到的库吗?从理论上讲,所有与它相链接的旧可执行文件都应该工作(包括GCC本身),但它感觉像是一个乱七八糟的东西

这样做安全吗?

可能吧,但我不建议这样做,至少在没有广泛测试的情况下,这样做几乎肯定会消耗任何收益。原因如下:

  • “ABI兼容”不一定是“bug兼容”。即使保持了ABI兼容性,如果你的应用程序依赖于以前版本的库中不正确的行为,那么你的应用程序仍可能以惊人的方式崩溃
  • 可能会有新的bug破坏你的应用程序,而不是ABI不兼容
  • 如果没有正确编译新库,它们可能与ABI不兼容
  • 您确定原始库是从原始GNU源代码编译的吗?也许有些补丁你不知道。如果你不能确定这一点,你就不能确定现有系统/应用程序的兼容性

你的目标是什么?如果你只想编译使用新特性的C++应用程序,你可以在原件上安装一个新版本的GCC,你只需要确保你所使用的所有库都是用新版本构建的。

不是编程问题,投票决定移动到超级用户。“Ben Voigt,我不同意。这需要具体了解GCC C++ ABI的实现方式以及混合这些LIBs的实际经验。虽然程序员知道ABI细节是有用的,但这基本上是一个系统管理问题。程序员经常需要了解系统管理,但是在这个问题中没有任何第一方代码。”本:没有系统管理员可以对这个问题提供有意义的答案,而不需要对GCC、C++有重要的了解。我想用GCC4.5构建并部署在一个只有GCC4.1或4.2中libstdc++的系统上。但除非并行安装新的GCC版本,否则它看起来越来越不像是个好主意。@Alex:如果归结到这一点,我会静态链接。二进制文件可能很大(相对而言),但对于一次性的事情,我不会担心它,而且您可以省去担心库版本的所有头痛。只需在旧系统上删除静态二进制文件,然后继续。@AlexB:agreen response,但是:尝试使用指向现有系统目录的安装目录配置新的GCC。从发行版的构建脚本复制配置。但是不要使用makeinstall。您可以将make安装到temp目录中(查看发行版打包脚本),然后从那里手动安装或创建您自己的发行版包,排除所有新库。