Упаковка лучших практик для сторонних зависимостей

Я впервые упаковываю приложение для Ubuntu. У меня есть несколько зависимостей, основными из которых являются Qt и ICU. Мне просто непонятно, как развернуть эти приложения, не попав в тупик для Linux.

Например, я хотел бы использовать версию 4.7.4 Qt, потому что в этом выпуске есть некоторые исправления ошибок, которыми я хотел бы воспользоваться. Я также хотел бы развернуть свое приложение на всех поддерживаемых в настоящее время версиях Ubuntu, что возвращает меня к Lucid. Но последняя доступная версия для Lucid - 4.6.2, которая даже API-совместима с 4.7.4. Опции, как я вижу:

  • Просто скажите «жесткие» и поддерживайте только те версии Ubuntu, в которых есть нужная мне библиотека, что на данном этапе означало бы Oneiric. Для более ранних версий они самостоятельно находят библиотеку 4.7.4 и разрешают все ее зависимости.
  • Предоставьте приватные версии библиотеки, скажем, libQtCore4_mycompany, и пакет для их установки.
  • Прикрепите частную версию сборки рядом с моим приложением (возможно, /opt/company/package/lib) и установите LD_LIBRARY_PATH перед выполнением моего приложения.

Ни один из них не является отличным вариантом, и, в частности, debuild ужасно использовать, если вы хоть немного отойдете от их ожиданий. Я не могу связать статически из-за ограничений LGPL (по крайней мере, так я их понимаю).

У меня также есть обратный вопрос. Предположим, я решил поставить зависимость от libQtCore4 (>= 4.7.4). Я видел достаточно регрессий между версиями Qt, поэтому есть вероятность, что 4.7.5 или 4.8.0 что-то сломают в моем приложении. Это просто то, с чем вам приходится иметь дело, или лучше всего полагаться на конкретную версию библиотеки, например libQtCore4 (= 4.7.4)?

1
задан 5 October 2011 в 19:51

1 ответ

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

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

0
ответ дан 5 October 2011 в 19:51

Другие вопросы по тегам:

Похожие вопросы: