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

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

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


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

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

Войти через центр авторизации
Похожие вопросы