问题相对简单:我如何构建 4.x 系列的 GCC(以及 binutils 和朋友),它以 2.4 ABI 为目标,与编译器的主机在同一架构上?
主机系统将是 x86 或 x86_64,唯一的要求是只要 ABI 匹配,构建的 ELF 文件就可以在旧内核上运行。(内核源/头文件存在)
为了链接它,还需要兼容的 libc。但是,我也可以动态链接它,因为我知道 (g)libc 版本。
任何指针将不胜感激。我对crosstool-ng有点熟悉,但这似乎不再支持 2.4 内核(原因很明显)。
问题相对简单:我如何构建 4.x 系列的 GCC(以及 binutils 和朋友),它以 2.4 ABI 为目标,与编译器的主机在同一架构上?
主机系统将是 x86 或 x86_64,唯一的要求是只要 ABI 匹配,构建的 ELF 文件就可以在旧内核上运行。(内核源/头文件存在)
为了链接它,还需要兼容的 libc。但是,我也可以动态链接它,因为我知道 (g)libc 版本。
任何指针将不胜感激。我对crosstool-ng有点熟悉,但这似乎不再支持 2.4 内核(原因很明显)。
可能最简单的方法是在旧操作系统上设置现代工具链。
RHEL 2.1 或 3 可能是最好的,因为它们直到最近才受到支持。
编译 gcc 4 可能会很棘手,因为您还需要数学库。您可能必须采用多阶段方法。
编辑:
编译较新的 gcc:
像这样的东西:
cd ~/software
tar xjf $DOWNLOAD/gcc/gcc-core-${GCCVER}.tar.bz2 || failure "unpack gcc failed"
tar xjf $DOWNLOAD/gcc/gcc-g++-${GCCVER}.tar.bz2 || failure "unpack g++ failed"
cd gcc-${GCCVER}
tar xjf $DOWNLOAD/gmp-5.0.2.tar.bz2 || failure "unpack gmp failed"
#tar xjf $DOWNLOAD/gmp-4.3.2.tar.bz2 || failure "unpack gmp failed"
ln -s gmp-* gmp
tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed"
#tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed"
ln -s mpfr-* mpfr
tar xzf $DOWNLOAD/mpc-0.9.tar.gz || failure "unpack mpc failed"
ln -s mpc-* mpc
cd ..
mkdir gcc-build
cd gcc-build
../gcc-${GCCVER}/configure --prefix=/opt/tools || failure "configure failed"
make || failure "make failed"
make install || failure "install failed"
我相信在这种情况下您可能应该构建一个 GCC 交叉编译器,并且您应该编译 GLibc 来处理对旧 2.4 内核的依赖关系。
然而,您是否只是简单地尝试编译您的代码,并将其与旧的 2.4 内核兼容的 Glibc 库链接?我想这应该可行。
您是否尝试在旧系统上运行您的二进制文件(在最近的系统上使用其最近的 GCC 获得了简单的方法)?什么没有按预期工作?
问候。