Собрать современный (4.x) GCC для ядра 2.4.x на той же архитектуре, что и хост? - PullRequest
7 голосов
/ 23 октября 2011

Вопрос относительно прямой: как я могу создать GCC серии 4.x (вместе с binutils и друзьями), который нацелен на 2.4 ABI на той же архитектуре, что и хост для компилятора?

Хост-система должна быть x86 или x86_64, и единственным требованием является то, чтобы встроенные файлы ELF работали на старом ядре, пока соответствует ABI. (Исходники / заголовки ядра существуют)

Для того, чтобы связать его, потребуется также совместимый libc. Однако я также могу динамически связываться с ним, так как знаю версию (g) libc.

Любые указатели будут высоко оценены. Я немного знаком с crosstool-ng , но кажется, что он даже больше не поддерживает ядра 2.4 (по понятным причинам).

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Вероятно, самый простой способ - установить современную цепочку инструментов на старой ОС.

RHEL 2.1 или 3 могут быть лучшими, так как они поддерживались до недавнего времени.

Компиляция gcc 4 может быть сложной, так как вам также понадобятся математические библиотеки. Возможно, вам придется сделать многоступенчатый подход.

EDIT:

Для компиляции нового 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"
0 голосов
/ 25 октября 2011

Я полагаю, что вам, вероятно, следует создать кросс-компилятор GCC в этом случае, и что вы должны скомпилировать GLibc, который обрабатывал бы зависимость от старого ядра 2.4.

Однако, вы просто пытались скомпилировать свой код и просто связать его со старой библиотекой Glibc, совместимой с ядром 2.4? Я полагаю, что это должно сработать.

И вы пытались запустить свой бинарный файл (полученный простым способом на недавней системе, использующей недавний GCC) на старой системе? Что не работает, как ожидалось?

Привет.

...