6.14. GCC-3.4.1

Пакет GCC содержит коллекцию компилятора GNU, включая компиляторы C и C++.

Расчетное время сборки 11.7 SBU

Требуемое место на диске 294 MB

GCC - зависимости установки: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed и Texinfo

6.14.1. Инсталируем GCC

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). GCC рекомендуется компилировать с настройками по умолчанию. Если вы задали переменные такие как CFLAGS и CXXFLAGS, рекомендуется убрать их при сборке пакета GCC.

Сейчас мы собираемся установить компиляторы языков C и C++, таким образом вам надо распаковать архивы GCC-core и GCC-g++ - они распакуются в одну и ту же директорию. Вы можете также распаковать пакет GCC-testsuite. Полный пакет GCC содержит намного больше компиляторов. Инструкции по их установке вы можете найти на http://www.linuxfromscratch.org/blfs/view/svn/general/gcc.html.

Примените только No-Fixincludes патч (не Specs патч), также использованный в предыдущей части:

patch -Np1 -i ../gcc-3.4.1-no_fixincludes-1.patch

GCC выпадает с ошибкой при компиляции некоторых пакетов, не входящих в базовую систему Linux From Scratch (такие как Mozilla и kdegraphics) когда применяется совместно с неправильной версией Binutils. Применим следующий патч для коррекции этой проблемы:

patch -Np1 -i ../gcc-3.4.1-linkonce-1.patch

Применим sed-замещение, которое запретит инсталяцию libiberty.a. Версия libiberty.a будет использоваться от Binutils:

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in

В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:

mkdir ../gcc-build cd ../gcc-build

Подготавливаем GCC для компиляции:

../gcc-3.4.1/configure --prefix=/usr \ --libexecdir=/usr/lib --enable-shared \ --enable-threads=posix --enable-__cxa_atexit \ --enable-clocale=gnu --enable-languages=c,c++

Компилируем пакет

make
[Important]

Важно

В этой части тестирование GCC является обязательным. Не пропускайте его.

Тестируем результат, но не останавливаемся при возникновении ошибок:

make -k check

Некоторые из известных ошибок были описаны в предыдущей части. Тест из Раздела 5.13, “GCC-3.4.1 - Шаг 2” все еще актуален здесь. Можете повторить его при необходимости.

Устанавливаем пакет

make install

Некоторые пакеты рассчитывают, что препроцессор C будет установлен в директории /lib. Для поддержки этих пакетов, создадим ссылку:

ln -s ../usr/bin/cpp /lib

Многие пакеты используют имя cc для вызова компилятора С. Для поддержки таких пакетов создадим ссылку:

ln -s gcc /usr/bin/cc
[Note]

Замечание

В этом месте рекомендуется повторить тест из части 6.12, “Переустановка средств”. Если тест не прошел, то, скорее всего, вы применили патч GCC Specs из Главы5.

6.14.2. Описание GCC

Проинсталированные программы: c++, cc (link to gcc), cpp, g++, gcc, gccbug и gcov

Проинсталированные библиотеки: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so] и libsupc++.a

Короткое описание

cc

C компилятор

cpp

C препроцессор; используется компилятором для извлечения #include, #define и похожих определений в исходных файлах

c++

C++ компилятор

g++

C++ компилятор

gcc

C компилятор

gccbug

Скрипт, применяемый для облегчения создания сообщений об ошибках

gcov

Содержит в себе несколько тестов; используется для анализа программ и определения, где оптимизация будет иметь наибольший эффект

libgcc

Описывает run-time поддержку для gcc

libstdc++

Стандартная C++ библиотека

libsupc++

Предоставляет поддержку шаблонов для языка програмирования C++