3. Настройка портов на использование требуемой версии GCC

Для использования требуемой версии GCC, установленной из коллекции портов FreeBSD, требуется дополнительная конфигурация системы.

3.1. Изменения в make.conf

Добавьте следующие строки в /etc/make.conf (или исправьте существующие):

.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
CC=gcc44
CXX=g++44
CPP=cpp44
.endif

В качестве альтернативы, можно установить вручную переменные окружения ${CC} и ${CPP}.

Замечание: Примеры, приведённые выше, сделаны для GCC версии 4.4. Для того, чтобы использовать gcc43, замените "gcc44" на "gcc43" и "4.4" на "4.3" и т.п.

3.2. Исправления в libmap.conf

Многие установленные из портов приложения и библиотеки скомпонованы с libgcc_s или libstdc++. В базовую систему уже включены эти библиотеки, но от более старой версии GCC (версии 4.2.1). Чтобы предоставить rltd (и ldd) правильные версии, добавьте следующие записи к /etc/libmap.conf (или измените существующие):

libgcc_s.so.1   gcc44/libgcc_s.so.1
libgomp.so.1    gcc44/libgomp.so.1
libobjc.so.3    gcc44/libobjc.so.2
libssp.so.0     gcc44/libssp.so.0
libstdc++.so.6  gcc44/libstdc++.so.6

Замечание: Пример выше приведен для GCC версии 4.4. Если вы используете gcc43, замените "gcc44" на "gcc43" и т.д. Следует отметить, что все вышеупомянутые библиотеки обратно совместимы с библиотеками, поставляемыми с базовой системой.

Внимание: Некоторые C++ программы могут перестать работать, если отсутствует корректная компоновка этих библиотек. Если невозможно скомпоновать их все, рекомендуется сделать это по крайней мере для libstdc++.so.

3.3. Специальные установки CFLAGS для коллекции портов

Для портов, не поддерживающих специальные установки CFLAGS, исправьте /etc/make.conf согласно следующему примеру:

.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
CC=gcc44
CXX=g++44
CPP=cpp44
CFLAGS+=-mssse3
.endif

Возможно заменить полностью CFLAGS и/или определить CPUTYPE. Мы рекомендуем устанавливать CPUTYPE так как во многих портах флаги оптимизации выбираются, базируясь на значении этой переменной.

3.4. Исключение портов, которые не собираются с новой версией GCC

Для того, чтобы исключить порты, которые не собираются со специальной версией GCC, исправьте /etc/make.conf согласно следующему примеру:

.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
.if empty(.CURDIR:M/usr/ports/net/openldap*)
CC=gcc44
CXX=g++44
CPP=cpp44
.endif
.endif

Пример, приведённый выше, отменяет принудительное использование gcc 4.4 для портов net/openldap*. Также возможно указать больше портов в одной строке:

.if empty(.CURDIR:M/usr/ports/net/openldap*) && empty(.CURDIR:M/usr/ports/xxx/yyy) && ...

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.