使用apt-get将GCC降级为旧版本


1

由于特定原因,我必须使用apt-get(不下载和编译源代码)将我的GCC降级到2.x版。

那可能吗?如果是,我如何找到存储库地址并通过它安装apt-get

提前致谢。


由于库依赖性,这将特定于您所使用的发行版本。顺便说一句,最好是并行安装旧版本的gcc而不是实际降级,并使用环境设置来强制编译所需的gcc以使用旧的gcc。鉴于gcc 2.x已经不再支持的时间长度,这将是一个挑战,即使你成功安装它,更换系统gcc也会破坏其他东西。
Stephanie 2014年

再研究一下,2.x系列可能在现代发行版中根本不可用。它在内核中很久没有得到支持(lwn.net/Articles/163881),无论你想用它编译什么,它都可能有依赖,也无法满足。如果您需要编译的软件无法更新以在较新的gcc和较新的库上进行编译,那么您最好的选择可能是在最后支持gcc 2.x的任何发行版的chroot中静态编译它
Stephanie

@Stephanie那么如何在其他版本中安装v2.x?
Afshin Mehrabani 2014年

我认为ABI兼容性和“de4pendency地狱”的问题将会让它变得几乎不可能,也就是说,更新软件以构建现代版本的gcc要比它更容易获得一个版本的gcc 2.x来安装和生成现代发行版上的可用二进制文件。问题是你不仅需要gcc 2.x,你需要它所需的所有依赖项,以及你想要构建的应用程序所需的所有依赖项,而且这些东西都没有被保存在9以上年份。
Stephanie 2014年

Answers:


1

对于所有实际意图和目的,你所要求的是不可能的,并在接下来的几段中解释为什么,以及一些潜在的解决方法。

虽然gcc,glibc,Linux内核和其他各种系统库没有像FreeBSD和OpenBSD那样紧密耦合,但它们确实具有并行演化。由于最后一次支持gcc 2.95的支持在2005年的内核中失去了支持,因此在核心系统库中也支持它。

只需要在现代系统上安装2.x版本的gcc就会成为一个重大障碍,因为所涉及的所有依赖关系 - 它依赖于Linux社区很久以前从中转移过的旧版系统库,从而创建了一个“依赖地狱”甚至从源代码安装,更不用说从软件包安装 - 仅仅依赖项可能会迫使你降级十几代或更多的Linux发行版,降级到一个不仅不再受支持的版本,而且也非常不安全。

在安装gcc之后,你仍然面临着让你的应用程序进行编译的问题 - 而且系统库的变化和gcc一样多或者更多,所以你必须再次完成这个过程的几十个,也许还有数百个其他依赖项。当然,所有这些依赖项已经在系统的其他地方使用,没有任何理智的方式来安装它们的正确版本。

在你有机会让所有部件再次运转之前,你可能正在寻找成千上万的工作时间,并且在此过程中,你已经将你的系统转变为如此难以维护和不稳定的东西,甚至重新启动系统将是盲目的练习,并且您已经将十多年的严重安全漏洞重新引入您的系统。

解决方法

然而,所有希望都不会丢失。短期解决方案是chroot或虚拟化。其中一个答案来自https://stackoverflow.com/questions/8176798/installing-gcc-2-95-3-in-ubuntu-10-04-3提到Debian Etch是支持gcc的最后一个发行版之一2.95。应该可以构建Debian Etch或虚拟机的chroot。该发行版最后在2010年获得了安全支持,因此您仍然需要考虑4年累积的安全漏洞。

你需要的旧版Debian只能在https://archive.debian.org/debian上找到,因为它们在这一点上完全没有维护。

debootstrap(https://wiki.debian.org/Debootstrap)似乎仍然可以安装etch,从而可以构建一个工作chroot,在其中你将能够编译和运行旧软件。

鉴于安全隐患,长期解决方案必须是更新代码,以便尽快在现有的,当前支持的发行版上进行编译。除非所讨论的软件用于一次性目的,例如从旧版本的程序中恢复数据,否则这绝对是至关重要的。

使这个移植过程易于管理的可行解决方案可能是在最终更新最新的Ubuntu版本的代码之前,逐步推进,前进并修复每个介入Debian版本的编译问题。由于Debian的发布周期比Ubuntu长得多,并且具有良好的向前兼容性,因此这不应该是一个不可克服的任务,并且几乎肯定比将gcc 2.x移植到最新的Ubuntu更可行。

编辑:蚀刻实际上是很多移植工作的完美之选 - 它支持从2.95到4.1的gcc版本,从而可以通过小步骤更新旧代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.