Это все еще должно поддерживаться в порядке, так как это обычно используется для построения кросс-компиляторов.
На самом деле, я только что сделал это с 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 dir, который не существует в gcc dir, поэтому все, что уже существует, будет иметь приоритет, но инструменты 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`
.. а также (конечно же) тестирование того, что установленная версия хорошо собирает исполняемые файлы, с несколькими простыми примерами, прежде чем выпустить ее на базу кода:)
Редактировать: комментарии ниже содержат некоторые наборы версий, которые, как известно, работают вместе. Не все комбинации будут работать, поэтому вам, возможно, придется пройти через метод проб и ошибок для комбинаций, отличных от упомянутых!
Гораздо позже редактировать: GDB также можно включить в эту сборку (опять же требуется совместимые версии компонентов - см. Комментарии).
Аналогичным образом добавьте это как последнюю вещь после binutils, используя for f in ../gdb-8.1.1/* ; do ln -s "${f}" ; done
, и сборка автоматически поднимет его.