Я упаковываю приложение в первый раз для Ubuntu. У меня есть несколько зависимостей, основными из которых являются Qt и ICU. Я просто не понимаю, как развернуть эти приложения, не вдаваясь в dll-hell для Linux.
Например, я хотел бы использовать версию 4.7.4 Qt, потому что есть некоторые исправления ошибок в этом выпуске, который я хотел бы использовать. Я также хотел бы развернуть мое приложение на всех поддерживаемых версиях Ubuntu, которое возвращает меня в Lucid. Но последняя версия, доступная для Lucid, - 4.6.2, которая даже не совместима с API с 4.7.4. Параметры, как я вижу:
/opt/company/package/lib
) и установите LD_LIBRARY_PATH
перед выполнением моего приложения. Ничто из этого не замечательно варианты, и, в частности, debuild
ужасно использовать, если вы уходите в малейшей степени из своих ожиданий. Я не могу связать статически из-за ограничений LGPL (по крайней мере, так я их понимаю).
У меня также есть обратный вопрос. Предположим, я решил установить зависимость от libQtCore4 (>= 4.7.4)
. Я видел достаточно регрессий между версиями Qt, что есть вероятность, что 4.7.5, или 4.8.0, что-то сломает в моем приложении. Это то, с чем вам приходится иметь дело, или лучше всего зависеть от точной версии библиотеки, например libQtCore4 (= 4.7.4)
?
Если вы действительно хотите поддерживать релизы, которые не имеют требуемой версии библиотеки, просто используйте статические ссылки. Имея совместно используемую библиотеку, вы являетесь единственным пользователем сбоев в работе с разделяемыми библиотеками, поэтому вы можете просто поместить все это в один двоичный файл. Вы даже сохраните некоторое пространство, так как части библиотеки, которую вы не вызываете, будут выбрасываться.
Я бы предположил, что вы начинаете с одноричной сборки, которая просто отображает зависимость обычно, а затем переключается на статическую связывание, когда вы передаете его в старые версии.