【发布时间】:2010-07-30 02:42:08
【问题描述】:
Linux C++ 程序使用 GCC 链接构建,针对 libgcc_s.so.1 和 libstdc++.so.6 库,每个库都包含多个 ABI:较新版本包含先前版本的 ABI 和新版本。 GCC ABI policy document 表示针对旧运行时构建的程序应该能够与新运行时一起运行。因此,理论上,旧的二进制文件应该可以在新系统上运行。
如果我有一个运行时间较旧的系统,并且不想在这个系统上升级 GCC,我可以手动将上述库替换为新库吗?理论上,链接到它的所有旧可执行文件都应该可以工作(包括 GCC 本身),但感觉就像是一个杂物。
这样做安全吗?
【问题讨论】:
-
不是编程问题,投票转为超级用户。
-
@Ben Voigt,我不同意。这需要有关 GCC C++ ABI 实现方式的特定知识以及混合这些库的实践经验。
-
虽然对于程序员来说了解 ABI 细节很有用,但这基本上是一个系统管理问题。程序员通常必须了解系统管理,但这个问题不涉及任何第一方代码。
-
@Ben:如果不具备 GCC、C++ 和 ABI 的丰富知识,那么任何系统管理员都无法为这个问题提供有意义的答案,而这些知识永远不会具备正常的系统管理员职责。