构建现代(4.x)GCC以在与主机相同的架构上定位2.4.x内核?

时间:2011-10-23 18:41:57

标签: linux gcc linux-kernel cross-compiling abi

问题相对简单:如何在与编译器主机相同的架构上构建针对2.4 ABI的4.x系列(以及binutils和朋友)的GCC?

主机系统是x86或x86_64,唯一的要求是只要ABI匹配,构建的ELF文件就在旧内核上运行。 (存在内核源/头)

为了将其链接,也需要兼容的libc。但是,我也可以动态链接它,因为我知道(g)libc版本。

任何指针都会非常感激。我对crosstool-ng有些熟悉,但这似乎不再支持2.4内核了(原因很明显)。

2 个答案:

答案 0 :(得分:1)

可能最简单的方法是在旧操作系统上设置现代工具链。

RHEL 2.1或3可能是最好的,因为直到最近才支持它们。

编译gcc 4可能很棘手,因为你也需要数学库。您可能需要采取多阶段方法。

编辑:

用于编译更新的gcc:

  1. 编译最新的make - 添加到PATH
  2. 解压gcc
  3. 将mpfr,gmp,mpc解压缩到gcc目录
  4. 将版本化目录符号链接到基础(mpfr,gmp,mpc)。
  5. 构建并安装gcc
  6. 这样的事情:

    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"
    

答案 1 :(得分:0)

我认为你可能应该在这种情况下构建一个GCC交叉编译器,并且你应该编译GLibc来处理旧的2.4内核的依赖。

但是,您是否只是尝试编译代码,并将其与旧的2.4内核兼容的Glibc库链接?我认为这应该有用。

您是否尝试在旧系统上运行二进制文件(使用最近的GCC在最近的系统上获得简单方法)?什么不能按预期工作?

问候。