Сборка crti.o для i386 - PullRequest
       42

Сборка crti.o для i386

0 голосов
/ 27 февраля 2009

Я пытаюсь построить кросс-компилятор с x86_64 в качестве хоста и i386 в качестве цели. Я получаю (все для общего) crti.o: Нет такой ошибки файла. Вместо того, чтобы брать уже созданные crti.o и crtn.o из дистрибутива ... как я могу собрать эти файлы явно из glibc (или, возможно, gcc) источников?

К вашему сведению, мне хорошо известна опция -m32 для компиляторов x86_64. Я бы предпочел иметь только 32-битную среду компилятора. Кроме того, причина, по которой я не хочу использовать компиляторы i386, уже построенные на gazillion, заключается в том, что я планирую смешивать и подбирать версии glibc / binutils / gcc в зависимости от моих потребностей в тестировании.

Спасибо, Chenz

Ответы [ 2 ]

1 голос
/ 27 февраля 2009

Вот одна возможность (из здесь )

Вам нужно установить 32 вашего дистрибутива. битовый пакет libc-dev, или вам нужно --disable-multilib, что приведет к компилятору, который не поддерживает 32 битовый режим.

0 голосов
/ 28 февраля 2009

Вы уверены, что используете правильную настройку кросс-компиляции? Должно быть

CBUILD = CHOST = x86_64-pc-linux-gnu
CTARGET = i386-pc-linux-gnu

когда вы запускаете сборку на x86_64, для компилятора на x86_64, который генерирует код для i386.

Если вы использовали CHOST = i386-pc-linux-gnu, вы будете пытаться сгенерировать 32-разрядные двоичные файлы, которые необходимо будет связать с 32-разрядным libc. Что хорошо, если у вас уже есть 32-битный libc, но, похоже, у вас его нет.

т.е.

$ tar xvjf gcc-*.tar.bz2
$ cd gcc-*/
$ mkdir build
$ cd build
$ ../configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=i386-pc-linux-gnu
...