Подтвердить что ты не робот

Рецепт для компиляции binutils & gcc вместе?

Согласно инструкциям gcc build, вы можете создавать binutils одновременно со зданием gcc (а также gmp, mpc и т.д.).

Вот что говорит эта страница:

Если вы также собираетесь строить binutils (либо для обновления существующего установки или для использования вместо соответствующие инструменты вашей ОС), распаковать дистрибутив binutils либо в том же каталоге, либо в отдельный один. В последнем случае добавьте символические ссылки на любые компоненты binutils, который вы намереваетесь построить наряду с компилятором (bfd, binutils, газ, gprof, ld, opcodes,...) к каталог, содержащий источники GCC.

Аналогично GMP, MPFR и MPC библиотеки могут быть автоматически построены вместе с GCC. Распакуйте GMP, Распределение источников MPFR и/или MPC в каталоге, содержащем GCC источники и переименовать их каталоги к gmp, mpfr и mpc, соответственно (или использовать символические ссылки с тем же название).

Это отлично работает для gmp, mpc, mpfr, но я не могу заставить его создать все binutils. Я также не могу понять, как заставить его построить новый золотой линкер из binutils. Возможные версии: gcc-4.4.2 и binutils-2.20.

Пошаговая инструкция будет отличной (для меня и для других, которые сталкиваются с этой проблемой также).

4b9b3361

Ответ 1

Это должно поддерживаться в порядке, так как оно обычно используется для создания кросс-компиляторов.

На самом деле, я только что сделал это с помощью gcc 4.6.0 и binutils 2.21 (с gmp, mpc и mpfr в соответствующих версиях), и следующее, казалось, отлично работало:

  • Получите все архивы материалов, которые собираетесь собирать (gcc-4.6.0.tar.bz2, binutils-2.21.tar.bz2 и т.д.) в новый каталог. src
  • Уничтожьте их все в этом каталоге, поэтому вы получите gcc-4.6.0/ binutils-2.21/ gmp-5.0.2/ и больше сидите рядом друг с другом

    tar jxvf gcc-4.6.0.tar.bz2
    ... (unpack others here, watch file lists scroll past)
    
  • cd gcc-4.6.0 и символизировать каталоги gmp, mpc и mpfr без их номеров версий в ссылках, например:

    ln -s ../gmp-5.0.2 gmp
    
  • Теперь символизируем все из каталога binutils, которого нет в каталоге gcc, поэтому все, что уже существует, будет иметь приоритет, но инструменты binutils будут видны для сборки:

    for file in ../binutils-2.21/* ; do ln -s "${file}" ; done
    
  • Измените каталог и создайте каталог сборки для создания всего этого отдельно для источников (это всегда было рекомендуемым методом, и он, как правило, более надежен, чем создание внутри исходного каталога):

    cd .. ; mkdir build
    
  • На этом этапе у вас должен быть набор каталогов и ссылок, которые выглядят примерно так:

    binutils-2.21/
    build/
    gcc-4.6.0/
       gmp -> ../gmp-5.0.2
       mpc -> ../mpc-0.9
       mpfr -> ../mpfr-3.0.1
       bfd -> ../binutils-2.21/bfd
       binutils -> ../binutils-2.21/binutils
       gas -> ../binutils-2.21/gas
       ... (lots more symlinks for binutils here, plus existing gcc stuff)
    gmp-5.0.2/
    mpc-0.9/
    mpfr-3.0.1/
    
  • Настройте всю партию из этого каталога, с любыми параметрами, которые необходимо передать для настройки:

    ../gcc-4.6.0/configure --prefix=/foo/bar --enable-languages=c,c++,ada
    
  • Построить, подождать, установить (вы, вероятно, захотите использовать make -j4 или так здесь, чтобы получить некоторые сборки параллельно, поскольку это займет некоторое время):

    make -j4 ; make install
    

Добавьте место назначения в свой путь, если он еще не был (и, возможно, каталог lib в LD_LIBRARY_PATH, если он находится за пределами указанных в /etc/ld.so.conf, как указано в сообщениях об установке библиотек во время шага make install) и все должно быть запущено с этой новой версией.

Возможно, стоит проверить, что вы используете эту установленную версию после того, как вы открыли новую оболочку, с помощью:

    `which gcc`

и

    `which as`

.. а также, что версия такая, как вы ожидаете:

    `gcc --version`

и

    `as --version`

.., а также (конечно) тестирование того, что установленная версия прекрасно работает с исполняемыми файлами с некоторыми простыми примерами, прежде чем вы отпустите его на базе кода:)

Изменить: приведенные ниже комментарии содержат несколько наборов версий, которые, как известно, работают вместе. Не все комбинации будут работать, поэтому вам, возможно, придется пройти пробную и пробную версию для разных комбинаций, упомянутых выше!

Ответ 2

То, что вы хотите сделать, называется сборкой "комбинированное дерево" или "in-tree binutils". Вы можете найти документацию о том, как продолжить здесь и there.

Ответ 3

Я всегда строил все по отдельности. После того, как вы построили и установили binutils, gcc должен прекрасно работать до тех пор, пока вы даете каждой конфигурации script те же опции --target и --prefix:

Binutils:

$ ./configure --target=XYZ --prefix=/abc/def
$ make all install

затем добавьте путь (если необходимо):

$ export PATH="$PATH:/abc/def/bin"

и постройте gcc:

$ ./configure --target=XYZ --prefix=/abc/def
$ make all-gcc install-gcc

Затем создайте свой libc и остальную часть gcc, если это необходимо (возможно, отладчик тоже!).