我正在使用Cent OS 5.
已安装旧版程序包。
我应该编译什么版本的gcc?
是否真的需要使用旧的gcc版本进行编译才能支持旧的linux操作系统?
如果是,为什么?
答案 0 :(得分:5)
我首先要说的是,获得可在CentOS 4上运行的软件构建的最简单方法是在这些目标发行版上构建代码,或者使用一些脚本/工具发布代码使在该机器上重建构建变得容易。如果您曾下载过源代码版本,并执行了/.configure && make && make install
步骤,那么这就是我所说的。
这些源代码版本基于GNU Autotools系统构建,该系统为您提供自动配置(它确定在目标系统上可以使用和不可以使用的内容)并生成要使用的构建文件。
GNU Autotools系统还有其他选择(坦白地说,我发现了一些学习和使用的苦差事),比如cmake和scons。这是一个页面(在scons上),它比较了流行的构建工具:
http://www.scons.org/wiki/SconsVsOtherBuildTools
现在为什么你需要构建旧的库和编译器,如果你想在你的CentOS 5系统上构建:
所以你有CentOS 5,它运行这个工具链:
gcc 4.1.2
glibc 2.5.x
libstdc++ 4.1.2
运行此工具链的CentOS 4:
gcc 3.4.x
glibc 2.3.x
libstdc++ 3.4.x
最大的问题是,如果您只是使用标准的CentOS 5工具构建C或C ++软件,它们将链接到CentOS 5 C和C ++库(glibc,libstdc ++,libgcc),而这些库不是向后兼容旧版本。也就是说,为glibc 2.5.5构建的软件绝对不能保证与glibc 2.4,甚至glibc 2.5.4一起运行(尽管除非有特殊情况,否则你可以在glibc 2.5上运行glibc 2.4内置软件。 X)。您还需要针对较旧的库版本构建依赖项。
当你更老时,你需要构建一个交叉编译器(查找crosstool),它将允许你为旧系统定位构建,它将链接到旧版本的libc和其他依赖于它的依赖项。好。
您可以将所有依赖项静态链接到二进制文件中,因此您不必担心依赖项等。但是,我从来没有做过这样的事情,我忘记了静态链接glibc是否存在问题,或者我是否正在考虑其他一些主要的静态链接问题(在技术层面上)。