Shared Library Symbol Versioning HOWTO

Материал из ALT Linux Wiki
Версия от 09:27, 1 августа 2008; SirRaorn (обсуждение | вклад) (Новая: Категория:HOWTO {{Stub}}{{Викифицировать}} ''рассказать что такое symbol versioning и зачем он нужен'' Допустим, ап...)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.


рассказать что такое symbol versioning и зачем он нужен

Допустим, апстрим понимает, что такое бинарная совместимость, и не делает глупостей (по крайней мере, не меняет базовых определений и прототипов). К счастью, такой расклад имеет место быть с большей частью системных библиотек. Тогда достаточно убедиться, что:

  1. В новой версии библиотеки не исчезли никакие старые переменные, и, по крайней мере, функции. Если исчезли, тогда нужно проверить, что их никто не использует. Если их кто-то использует, тогда придётся восстанавливать.
  2. Если добавились новые переменные или функции, сделать version script (добавить новую секцию в version script, в которой перечислены все новые переменные и, по крайней мере, функции).

Развёрнутое пояснение:

  1. Как проверить что убавившиеся функции никто не использует. Нужно иметь копию Сизифа. Нужно установить пакет qa-robot и запустить 'qa-robot bad_elf_symbols /ALT/Sisyphus/files/i586/RPMS'. Далее грепать файл ~/.qa-robot/bad_elf_symbols/ref на предмет убавившихся символов.
  2. Как узнать, убавились ли или добавились новые символы, и как сделать version script. Нужно собрать новую версию пакета в тестовом режиме (со старым version script или без него). Далее установить пакет qa-robot и запустить 'rpmsodiff libстарый.rpm libновый.rpm'. Он покажет, какие символы убавились, а какие добавились, а также выдаст заготовку для version script'а. Эту заготовку нужно поместить в файл с названием lib%name.map (альтернативно lib%name.ver, lib%name.sym или lib%name.def), возможно, немножко поправив название секции (LIBNAME_1.2.3 vs NAME_1.2.3). Этот файл далее нужно скормить в gcc или libtool с помощью -Wl,--version-script=lib%name.def. Убедиться, что у пакета появился provides вида lib%name*.so*(LIBNAME_1.2.3).