Gcc 如何为遗留操作系统编译

Gcc 如何为遗留操作系统编译,gcc,legacy-code,Gcc,Legacy Code,我使用的是CentOS5 它安装了旧的软件包 我应该用什么版本的gcc编译 是否真的需要使用旧的gcc版本进行编译才能支持旧的linux操作系统 如果是,原因是什么?首先,我要说的是,获得在CentOS 4甚至更早版本上运行的软件版本的最简单方法是在这些目标发行版上构建代码,或者将代码与一些脚本/工具一起提供,以便在该机器上轻松地重新创建版本。如果您曾经下载过源代码版本,并且执行了/.configure&&make&&makeinstall步骤,这就是我要说的 这些源版本构建在GNU Autot

我使用的是CentOS5

它安装了旧的软件包

我应该用什么版本的gcc编译

是否真的需要使用旧的gcc版本进行编译才能支持旧的linux操作系统


如果是,原因是什么?

首先,我要说的是,获得在CentOS 4甚至更早版本上运行的软件版本的最简单方法是在这些目标发行版上构建代码,或者将代码与一些脚本/工具一起提供,以便在该机器上轻松地重新创建版本。如果您曾经下载过源代码版本,并且执行了
/.configure&&make&&makeinstall
步骤,这就是我要说的

这些源版本构建在GNU Autotools系统上,该系统为您提供自动配置(它确定什么可以在目标系统上使用,什么不能在目标系统上使用),并生成一个生成文件以进行构建

GNU自动工具系统(坦白地说,我觉得学习和使用它很麻烦)还有其他选择,比如cmake和scons。下面是一个页面(关于SCON),比较了流行的构建工具:

那么,如果您仍然希望在CentOS 5计算机上构建旧版CentOS安装,该怎么办? 现在,如果您想在CentOS 5系统上进行构建,您需要使用传统库和编译器进行构建的原因如下:

所以您有CentOS 5,它运行这个工具链:

gcc 4.1.2
glibc 2.5.x
libstdc++ 4.1.2
gcc 3.4.x
glibc 2.3.x
libstdc++ 3.4.x
以及运行此工具链的CentOS 4:

gcc 4.1.2
glibc 2.5.x
libstdc++ 4.1.2
gcc 3.4.x
glibc 2.3.x
libstdc++ 3.4.x

最大的问题是,如果你只使用标准的CCENTs 5工具来构建C或C++软件,它们将被链接到CCENOS 5 C和C++库(GLYBC,LIbSTDC++ +,LIGBCC),这些库与旧版本不向后兼容。也就是说,为glibc 2.5.5构建的软件不能保证与glibc 2.4甚至glibc 2.5.4一起运行(尽管除非有特殊情况,否则您可以在glibc 2.5.x上运行glibc 2.4构建的软件)。您还需要针对较旧的库版本构建依赖关系

当您变得更老时,您将需要构建一个交叉编译器(查找交叉工具),该编译器将允许您针对较旧系统的构建,该编译器将链接到较旧版本的libc以及基于该系统构建的其他依赖项

除了建立在目标上之类的东西之外,还有别的东西吗?
您可以将所有依赖项静态链接到二进制文件中,这样就不必担心依赖项之类的问题。然而,我从来没有做过这样的事情,我忘记了静态链接glibc是否有问题,或者我是否想到了其他一些主要的库,它们对静态链接(在技术层面上)提出了问题

首先,我要说的是,获得在CentOS 4或更老版本上运行的软件版本的最简单方法是在这些目标发行版上构建代码,或者将您的代码与一些脚本/工具一起发布,以便在该机器上轻松地重新创建版本。如果您曾经下载过源代码版本,并且执行了
/.configure&&make&&makeinstall
步骤,这就是我要说的

这些源版本构建在GNU Autotools系统上,该系统为您提供自动配置(它确定什么可以在目标系统上使用,什么不能在目标系统上使用),并生成一个生成文件以进行构建

GNU自动工具系统(坦白地说,我觉得学习和使用它很麻烦)还有其他选择,比如cmake和scons。下面是一个页面(关于SCON),比较了流行的构建工具:

那么,如果您仍然希望在CentOS 5计算机上构建旧版CentOS安装,该怎么办? 现在,如果您想在CentOS 5系统上进行构建,您需要使用传统库和编译器进行构建的原因如下:

所以您有CentOS 5,它运行这个工具链:

gcc 4.1.2
glibc 2.5.x
libstdc++ 4.1.2
gcc 3.4.x
glibc 2.3.x
libstdc++ 3.4.x
以及运行此工具链的CentOS 4:

gcc 4.1.2
glibc 2.5.x
libstdc++ 4.1.2
gcc 3.4.x
glibc 2.3.x
libstdc++ 3.4.x

最大的问题是,如果你只使用标准的CCENTs 5工具来构建C或C++软件,它们将被链接到CCENOS 5 C和C++库(GLYBC,LIbSTDC++ +,LIGBCC),这些库与旧版本不向后兼容。也就是说,为glibc 2.5.5构建的软件不能保证与glibc 2.4甚至glibc 2.5.4一起运行(尽管除非有特殊情况,否则您可以在glibc 2.5.x上运行glibc 2.4构建的软件)。您还需要针对较旧的库版本构建依赖关系

当您变得更老时,您将需要构建一个交叉编译器(查找交叉工具),该编译器将允许您针对较旧系统的构建,该编译器将链接到较旧版本的libc以及基于该系统构建的其他依赖项

除了建立在目标上之类的东西之外,还有别的东西吗?
您可以将所有依赖项静态链接到二进制文件中,这样就不必担心依赖项之类的问题。然而,我从来没有做过这样的事情,我忘记了静态链接glibc是否有问题,或者我是否想到了其他一些主要的库,它们对静态链接(在技术层面上)提出了问题

您是否正在另一台机器上构建软件,并将在Centos机器上使用它?@Birryrree我正在我的机器上构建安装了Centos 5的软件。但我希望应用程序能够在Centos 4上使用,如果可能的话,也可以在旧版上使用。您是否在另一台机器上构建软件,并将在Centos机器上使用它?@Birryrree我正在我的机器上构建安装了cent os 5的软件。但我希望该应用程序能够在CentOS4上使用,如果可能的话,也可以在old上使用。谢谢。这是我在stackoverflow上得到的最好答案。解释所有事情。:)还有一个问题。关于cent os 6或更多新操作系统。使用libc编译代码有什么好处吗?或者我可以在cent os 5上发布二进制代码?@Vivek:CentOS 6将使用glibc 2.11,我认为,因此您应该能够使用其libc运行针对glibc 2.5构建的软件。请记住,您必须提供您的软件所需的所有其他依赖项库,这些依赖项库是针对同一版本的glibc构建的。也就是说,根据Glibc2.11构建软件