Как заставить библиотеки хорошо работать с упаковкой Linux?

Я являюсь автором библиотеки C ++, которая распространяется в нескольких дистрибутивах Linux.
Библиотека включает в себя заголовки и источник; Пакеты Linux распространяют его как заголовки + разделяемая библиотека (.so).

Я ищу рекомендации, которые облегчили бы жизнь разработчикам пакетов Linux.

Вещи, которые меня интересуют, включают в себя:

  • Совместимость API (например, изменение сигнатур функций). Очевидно, что поддержание совместимости между небольшими выпусками имеет решающее значение. Как насчет основных изменений версии?

  • Двоичная совместимость (например, изменение размеров видимых извне структур данных). Насколько важно быть совместимым с ABI в небольших версиях? Есть ли проблемы с нарушением этого в основных релизах?

  • Советы по созданию версий. В настоящее время я использую CMake — какие-либо конкретные настройки, которые я должен установить, чтобы максимизировать вероятность того, что разработчики пакетов могут просто использовать мой CMakeLists.txt?

Если есть что-то еще, что я скучаю, я был бы рад услышать об этом.

3

Решение

Как сопровождающий Linux, я могу сказать, что для нас очень важна как обратная двоичная (ABI), так и исходная (API) совместимость вашей библиотеки.

Изменения API могут помешать перестройке некоторых приложений (или других библиотек) в дистрибутиве, которые зависят от вашей библиотеки. Это может нарушить массовое восстановление дистрибутива.

Изменения ABI могут нарушать определенные двоичные обновления. Нам необходимо проверить изменения ABI в обновленных библиотеках и перестроить все зависимые приложения, если обнаружены некоторые опасные изменения. В этом случае пользователь должен загрузить пакет обновления для библиотеки и для всех зависимых приложений. Если библиотека имеет обратный API и ABI стабильны, мы можем только обновить пакет библиотеки.

Если вы нарушаете ABI, пожалуйста, измените SONAME вашей библиотеки (Bump версия). И, пожалуйста, не вводите изменения API / ABI в микро / патч-релизы.

Я рекомендую вам использовать аби-податливость корректор инструмент для проверки вашей библиотеки на предмет обратной совместимости API / ABI. Смотрите примеры отчетов инструмента для библиотеки Qt: http://abi-laboratory.pro/tracker/timeline/qt/

Вам нужно скомпилировать отладочную версию вашей библиотеки с дополнением -g -Og опций и дамп ABI вашей библиотеки с помощью аби-самосвал инструмент. Затем сравните два дампов ABI разных версий, чтобы сгенерировать отчет об изменениях ABI.

введите описание изображения здесь

2

Другие решения

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

Рассмотрим Debian: когда пакет находится в Debian, хосты сборки перекомпилируют каждое обновление на каждой поддерживаемой платформе. C ABI редко изменяется, но C ++ ABI требует особого внимания (как упоминалось в этом сообщении 2005 года для разработчиков Debian: http://lwn.net/Articles/139810/)

Я не считаю разумным предоставлять пакет C ++, который будет работать везде. ABI слишком специфичен для сайта: https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

2

По вопросам рекламы [email protected]