Использование более новых версий GCC и binutils c коллекцией портов FreeBSD
Пред. |  | След.

# 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>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.