Существует ли какая-либо сопоставимая альтернатива Qt?

#c #qt #user-interface #size #dll

#c #qt #пользовательский интерфейс #размер #dll

Вопрос:

Мне нравится идея Qt, однако я использую ее не только для разработки с открытым исходным кодом, но и с закрытым исходным кодом. Это не настоящая проблема, потому что я просто лицензирую под LGPL и распространяю необходимые библиотеки DLL. К сожалению, я столкнулся с проблемой.

Размер скомпилированного статически связанного исполняемого файла составляет 4,36 МБ. Не слишком убогий.

Размер скомпилированного динамически связанного исполняемого файла составляет 250 КБ, однако я также должен включить почти 35 МБ в DLL-файлы при установке. Это ДЕЙСТВИТЕЛЬНО безвкусно, и независимо от того, как я на это смотрю, я не могу оправдать соотношение размера и использования. Это, и я просто не могу позволить себе коммерческую лицензию. Поговорим о завышении цен начинающим разработчикам.

В любом случае, вы видите мою проблему. Моя программа выполняет только одну функцию. 35 МБ слишком велики. К сожалению, я слышал ужасные истории о том, насколько плохо поддерживаются wxWidgets, но, учитывая мою ситуацию, я боюсь, что буду вынужден использовать его. Может ли кто-нибудь порекомендовать мне альтернативу, которая почти такая же мощная, но не приведет к раздуванию, которое приносит скомпилированный Qt исполняемый файл, скомпилированный в LGPL? Спасибо!

Комментарии:

1. Для чего вы используете Qt? Только графический интерфейс? Разве невозможно упаковать в ваше приложение только необходимые части Qt? Вам не обязательно отправлять Qt целиком, если вы не используете каждую его часть. Посмотрите, от каких DLL действительно зависит ваш исполняемый файл.

2. В этом проблема. Это необходимые библиотеки DLL. QtCore4, QtGui и т.д. Для скомпилированного исполняемого файла Hello World требовалось 30 МБ только в DLL :/.

3. что это за одна функция , которую выполняет ваша программа? Для этой функциональности могут быть доступны платформенно-независимые альтернативы без привлечения Qt..

4. Даже если я выберу все библиотеки DLL Qt в моей сборке Qt (включая Phonon и WebKit), я едва ли получу объем до 35 МБ. Что делает ваше приложение и вы абсолютно уверены, что вам нужны все библиотеки DLL?

5. Может быть, это потому, что я использую SDK, а не компилирую его сам с помощью DLL? На самом деле я скомпилировал статические исполняемые файлы с таким количеством команд оптимизации, как только мог.

Ответ №1:

Почему бы вам не поместить всю необходимую функциональность в отдельную статически скомпилированную dll и динамически связать с ней свою программу. Вы можете опубликовать исходный код статически скомпилированной dll, поскольку это всего лишь оболочка. И в целом вы все равно будете соблюдать LGPL.

Комментарии:

1. IANAL итак, конечно, вы должны самостоятельно подтвердить, действительно ли это так.

2. Это эффективно создает новую библиотеку, состоящую из строгого подмножества Qt, что совершенно законно. Вам просто нужно убедиться, что вы сделали доступными как исходный код для вашей библиотеки, так и исходный код для версии Qt, из которой она была собрана. Требование LGPL заключается в том, чтобы конечный пользователь мог заменить библиотеку модифицированной версией, которой это соответствовало бы.

3. Очень интересная лазейка. Итак, если я правильно понимаю, я бы обработал всю работу с Qt в отдельной статической библиотеке. Этот файл подпадает под LGPL, потому что он напрямую ссылается на Qt, поэтому мне пришлось бы выпустить его под LGPL. Вопрос в том, поскольку я ссылаюсь на статическую библиотеку, которая косвенно обрабатывает всю работу Qt, не означает ли это, что я все еще ссылаюсь на Qt?

4. @Dr.McNinja: Вы всегда «ссылаетесь» на Qt. Чего вы избегаете с помощью метода hawk, так это включения Qt непосредственно в ваш исполняемый файл через статическое связывание, из-за чего LGPL доставляет вам неприятности. Предложение Hawk — это просто быстрый и удобный способ удалить неиспользуемые фрагменты Qt и создать новую динамическую библиотеку (DLL) с остальными. Функционально это идентично загрузке исходного кода Qt, удалению ненужного кода и созданию DLL из результата. Пока вы выпускаете исходный код для этой новой, меньшей библиотеки DLL, все в порядке.

Ответ №2:

Единственное, что я могу предложить, это попробовать UPX (или аналогичный), упаковывающий динамические библиотеки DLL, чтобы уменьшить их размер, в зависимости от того, сколько кода в сравнении с данными / ресурсами содержит библиотека DLL, вы можете получить довольно впечатляющие результаты.

Комментарии:

1. Например: QtCore QtGui занимает от 10 МБ до 4,3 МБ. Хотя я лично считаю, что увеличенное использование памяти не стоит сэкономленного дискового пространства.

Ответ №3:

http://www.fltk.org / Взгляните на это 🙂 Это проще, с открытым исходным кодом и может сделать достаточно для ваших нужд.