В началоРуководство Gentoo Linux по обновлению GCC → Переход с GCC-3.3 на 3.4 или более новый
Gentoo-doc HOME Пред.: Общие указания по обновлениюВ началоУровень выше: Руководство Gentoo Linux по обновлению GCCСлед.: Обновление GCC на новой установке

3. Переход с GCC-3.3 на 3.4 или более новый

3.1. Введение

Переход с GCC-3.3 на 3.4 или более новую версию не так гладок, ведь между этими версиями изменился двоичный прикладной интерфейс C++ (ABI). Также придется позаботиться о существующей проблеме с библиотекой libstdc++.

3.2. Варианты

Примечание

Если вы обновляете GCC на машине SPARC, вам придется выбрать путь полной пересборки системы из-за некоторых внутренних изменений двоичного интерфейса (ABI) GCC в области передачи параметров функций.

У вас есть два варианта обновления системы. Первый способ быстрее и требует использования программы revdep-rebuild из пакета gentoolkit, а во втором вся система пересобирается с нуля, чтобы задействовать новые возможности GCC. Ваше дело, какой из способов выбрать. В большинстве случаев первого способа достаточно.

3.3. Использование revdep-rebuild

Если вы выбрали этот способ, нужно сначала установить gentoolkit, если вы еще этого не сделали. Затем обновите GCC и переключите систему на новый компилятор. Также пересоберите пакет libtool, чтобы обеспечить пригодность программ для компиляции.

Листинг 4. Установка gentoolkit и обновление GCC

# emerge -an gentoolkit
# emerge -uav gcc
(вместо "i686-pc-linux-gnu-3.4.5" укажите обновленную
 версию GCC и настройки CHOST)
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile

(пересборка libtool)
# emerge --oneshot -av libtool


Теперь посмотрите, какие пакеты собирается пересобирать revdep-rebuild. Затем запустите revdep-rebuild на собственно пересборку. Это займет некоторое время, так что потерпите.

Листинг 5. Использование revdep-rebuild

# revdep-rebuild --library libstdc++.so.5 -- -p -v
# revdep-rebuild --library libstdc++.so.5


Примечание

Возможно, у вас появятся проблемы с несуществующими версиями пакетов из-за того, что они устарели или замаскированы. В этом случае можно при запуске revdep-rebuild указать параметр --package-names. Это заставит пакеты пересобираться, основываясь на именах пакетов, вместо точного имени и версии.

Для обеспечения совместимости с более старыми двоичными приложениями C++ и любыми пакетами, которые revdep-rebuild мог пропустить, надо установить пакет sys-libs/libstdc++-v3 до того, как удалять GCC 3.3 из своей системы.

Листинг 6. Установка libstdc++-v3 и удаление GCC

# emerge --oneshot sys-libs/libstdc++-v3
# emerge -aC =sys-devel/gcc-3.3*


3.4. Использование emerge -e

Этот гораздо более медленный способ пересобирает всю систему, гарантируя, что все пересобирается новым компилятором, и, таким образом, он безопаснее. Сперва потребуется обновить GCC и libtool, и переключить систему на новый компилятор.

Листинг 7. Обновление GCC

# emerge -uav gcc
(вместо "i686-pc-linux-gnu-3.4.5" укажите обновленную
 версию GCC и настройки CHOST)
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile

(пересборка libtool)
# emerge --oneshot -av libtool


Для обеспечения совместимости с более старыми двоичными приложениями C++, надо установить в систему пакет sys-libs/libstdc++-v3.

Листинг 8. Установка libstdc++-v3

# emerge --oneshot sys-libs/libstdc++-v3


Теперь займемся пересборкой сначала пакетов system, а затем world. Это займет очень длительное время, зависящее от количества установленных пакетов: ведь будут пересобираться все средства компиляции и поддерживающие системные файлы, а затем каждый пакет, находящийся в вашей системе. Это необходимо, чтобы все пакеты были гарантированно скомпилированы уже с новыми средствами компиляции, включая сами эти средства.

Листинг 9. Пересборка system и world

# emerge -e system
# emerge -e world


Теперь можно удалить старые версии GCC, не вызывая проблем:

Листинг 10. Очистка

# emerge -aC =sys-devel/gcc-3.3*


Пред.: Общие указания по обновлениюВ началоУровень выше: Руководство Gentoo Linux по обновлению GCCСлед.: Обновление GCC на новой установке
В началоРуководство Gentoo Linux по обновлению GCC → Переход с GCC-3.3 на 3.4 или более новый