Для использования требуемой версии GCC, установленной из коллекции портов FreeBSD, требуется дополнительная конфигурация системы.
Добавьте следующие строки в /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"
и т.п.
Многие установленные из портов приложения и библиотеки
скомпонованы с 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.
Для портов, не поддерживающих специальные установки
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 так как во многих портах флаги оптимизации
выбираются, базируясь на значении этой переменной.
Для того, чтобы исключить порты, которые не собираются со
специальной версией 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>.