Для использования требуемой версии 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>.