Кроссплатформенность приложений на Qt. Как справится с большим размером статически линкованных библиотек?

Здравствуйте. Столкнулся с задачей написать кроссплатформенную программу. Выбор сразу пал на Qt в связке с QML. На линуксе проблем с наличием самого Qt нет, но на Windows и OS X по умолчанию они не стоят, а заставлять пользователя устанавливать что-либо дополнительное выглядит странно. Поэтому решил использовать статическую линковку с Qt. На Windows размер библиотек получается а пределах 30-50 мб, а вот на OS X размер составляет 100-200 мб (при том, что сама среда разработки Qt весит на маке 10 гб). Для среднего приложения 200 мб библиотек это весьма странно. Вопрос: есть ли способ уменьшить размеры скомпилированного файла? Хотелось бы услышать советы от тех, кто постоянно пользуется Qt, как вы справляетесь с отсутствием самой Qt на многих системах?
  • Вопрос задан
  • 362 просмотра
Решения вопроса 1
Zifix
@Zifix Куратор тега Qt
Barbatum
На маке-то зачем статическая линковка? Там все равно будет все одним .app файлом, все нужные динамические библиотеки заливаются через macdeployqt.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg
Любые ответы на любые вопросы
У вас проблема в терминологии - при статической линковке вы на выходе должны получить ровно один файл, который зависит только от стандартных библиотек Windows. При этом вы можете так собрать статические библиотеки Qt, что в них не будет "лишнего" (функционала Qt, который в вашей программе не задействован).

Здесь у вас будут три проблемы:
  • под форточками собирать qt - удовольствие ниже среднего (вы не сможете слету открыть терминал и вбить туда make)
  • параметры сборки под ваше приложение придется долго подбирать, а если у вас нет кластера для сборки, вы можете собирать каждую новую версию qt по полдня
  • если у вас коммерческий продукт, изучите внимательно, как LGPL относится к статической компоновке


После этого, на полученный файл можно будет натравить упаковщик типа UPX, что позволит выиграть еще процентов 30.
Ответ написан
@vilgeforce
Раздолбай и программист
А что за библиотеки вам нужны при статической(!) линковке? Статика на выходе получается зависимой только от системных библиотек.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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