В начало → Руководство Gentoo Linux по обновлению GCC → Переход с GCC-3.3 на 3.4 или более новый |
Переход с GCC-3.3 на 3.4 или более новую версию не так гладок, ведь между этими версиями изменился двоичный прикладной интерфейс C++ (ABI). Также придется позаботиться о существующей проблеме с библиотекой libstdc++.
Если вы обновляете GCC на машине SPARC, вам придется выбрать путь полной пересборки системы из-за некоторых внутренних изменений двоичного интерфейса (ABI) GCC в области передачи параметров функций.
У вас есть два варианта обновления системы. Первый способ быстрее и требует использования программы revdep-rebuild из пакета gentoolkit, а во втором вся система пересобирается с нуля, чтобы задействовать новые возможности GCC. Ваше дело, какой из способов выбрать. В большинстве случаев первого способа достаточно.
Если вы выбрали этот способ, нужно сначала установить 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*
Этот гораздо более медленный способ пересобирает всю систему, гарантируя, что все пересобирается новым компилятором, и, таким образом, он безопаснее. Сперва потребуется обновить 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.
Теперь займемся пересборкой сначала пакетов system, а затем world. Это займет очень длительное время, зависящее от количества установленных пакетов: ведь будут пересобираться все средства компиляции и поддерживающие системные файлы, а затем каждый пакет, находящийся в вашей системе. Это необходимо, чтобы все пакеты были гарантированно скомпилированы уже с новыми средствами компиляции, включая сами эти средства.
Теперь можно удалить старые версии GCC, не вызывая проблем:
В начало → Руководство Gentoo Linux по обновлению GCC → Переход с GCC-3.3 на 3.4 или более новый |