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) && ...

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

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.