7

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

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

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

任何指针将不胜感激。我对crosstool-ng有点熟悉,但这似乎不再支持 2.4 内核(原因很明显)。

4

2 回答 2

1

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

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

编译 gcc 4 可能会很棘手,因为您还需要数学库。您可能必须采用多阶段方法。

编辑:

编译较新的 gcc:

  1. 编译最新的 make - 添加到 PATH
  2. 解压 gcc
  3. 将mpfr、gmp、mpc解压到gcc目录下
  4. 将版本化目录符号链接到基本目录(mpfr、gmp、mpc)。
  5. 构建和安装 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"
于 2011-10-25T19:53:34.217 回答
0

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

然而,您是否只是简单地尝试编译您的代码,并将其与旧的 2.4 内核兼容的 Glibc 库链接?我想这应该可行。

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

问候。

于 2011-10-24T22:20:17.967 回答