Делаю приложение под Windows на Qt4.5, QtCreator (все самое последнее). Можно ли библиотеки QtCore4.dll, QtGui4.dll и т.д. статически прилинковать к exe как это делается в MFC, или их надо явно включать в дистрибутив?
21.01.10 13:07: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Qt. Статическая линковка?
От:
Аноним
Дата:
31.05.09 13:36
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Делаю приложение под Windows на Qt4.5, QtCreator (все самое последнее). Можно ли библиотеки QtCore4.dll, QtGui4.dll и т.д. статически прилинковать к exe как это делается в MFC, или их надо явно включать в дистрибутив?
Можно.
Для этого тебе нужно пересобрать Qt (скрипт configure) с опцией для статической линковки. Но учти, что рпазмер исполняемого файла зааааметно увеличится. Подробнее эта информация есть в QtAssistant.
Re[2]: Qt. Статическая линковка?
От:
Аноним
Дата:
31.05.09 15:52
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Можно. А>Для этого тебе нужно пересобрать Qt (скрипт configure) с опцией для статической линковки. Но учти, что рпазмер исполняемого файла зааааметно увеличится. Подробнее эта информация есть в QtAssistant.
Кроме этого, ты больше не сможешь использовать Qt под лицензией LGPL.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Делаю приложение под Windows на Qt4.5, QtCreator (все самое последнее). Можно ли библиотеки QtCore4.dll, QtGui4.dll и т.д. статически прилинковать к exe как это делается в MFC, или их надо явно включать в дистрибутив?
А>Можно. А>Для этого тебе нужно пересобрать Qt (скрипт configure) с опцией для статической линковки. Но учти, что рпазмер исполняемого файла зааааметно увеличится. Подробнее эта информация есть в QtAssistant.
Ну а с динамической линковкой всё равно придётся тащить с собой эти длл... как бы менять шило на мыло... К сожалению не всегда да и наврено почти всегда на виндовой машине нету Qt библиотек-то в системных папках
Здравствуйте, Poirot, Вы писали:
P>Ну а с динамической линковкой всё равно придётся тащить с собой эти длл... как бы менять шило на мыло... К сожалению не всегда да и наврено почти всегда на виндовой машине нету Qt библиотек-то в системных папках
Угу, только первый раз при установке. Зато потом auto update может не тащить их, что заметно увеличит скорость загрузки, как минимум.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Делаю приложение под Windows на Qt4.5, QtCreator (все самое последнее). Можно ли библиотеки QtCore4.dll, QtGui4.dll и т.д. статически прилинковать к exe как это делается в MFC, или их надо явно включать в дистрибутив?
А>Можно. А>Для этого тебе нужно пересобрать Qt (скрипт configure) с опцией для статической линковки. Но учти, что рпазмер исполняемого файла зааааметно увеличится. Подробнее эта информация есть в QtAssistant.
И хотелось бы узнать у автора топика, на сколько увеличился размер программы в итоге ну и аппетиты по памяти.
Здравствуйте, DIMEDROLL, Вы писали:
А>>Кроме этого, ты больше не сможешь использовать Qt под лицензией LGPL. DIM>Это ж почему так?
LGPL требует, чтобы пользователь мог делать изменения в LGPL-ной библиотеке.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, DIMEDROLL, Вы писали:
А>>>Кроме этого, ты больше не сможешь использовать Qt под лицензией LGPL. DIM>>Это ж почему так? C>LGPL требует, чтобы пользователь мог делать изменения в LGPL-ной библиотеке.
В этом случае тоже можно выкрутиться. Например, предоставить объектный файл, к которому, прилинковав статическую библиотеку, можно получить программу.
Здравствуйте, DIMEDROLL, Вы писали:
C>>LGPL требует, чтобы пользователь мог делать изменения в LGPL-ной библиотеке. DIM>Непонял. На примере пожалуйста. http://www.gnu.org/licenses/lgpl-2.1.html
For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
Т.е. для статического связывания ты должен предоставить пользователю все объектные файлы, чтобы он мог перелинковать твоё приложение с изменённой библиотекой.
В случае динамического связывания такой проблемы нет — пользователь просто может поменять нужную библиотеку.
Здравствуйте, Cyberax, Вы писали: C>Т.е. для статического связывания ты должен предоставить пользователю все объектные файлы, чтобы он мог перелинковать твоё приложение с изменённой библиотекой. C>В случае динамического связывания такой проблемы нет — пользователь просто может поменять нужную библиотеку.
Я думал что под LGPL можно создавать и продавать приложения на QT, а выходит что нужно поставлять покупателям обьектные файлы в добавок к файлам приложения? О_о
Здравствуйте, DIMEDROLL, Вы писали:
C>>В случае динамического связывания такой проблемы нет — пользователь просто может поменять нужную библиотеку. DIM>Я думал что под LGPL можно создавать и продавать приложения на QT
Можно.
DIM>а выходит что нужно поставлять покупателям обьектные файлы в добавок к файлам приложения? О_о
Только если используешь статическое связывание.
Здравствуйте, DIMEDROLL, Вы писали:
C>>Только если используешь статическое связывание. DIM>А для создания PE-файлов(Portable Executable) по другому никак...
Ещё раз, при использовании динамического связывания пользователь может просто поменять QT4.dll на свою.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, DIMEDROLL, Вы писали:
C>>>Только если используешь статическое связывание. DIM>>А для создания PE-файлов(Portable Executable) по другому никак... C>Ещё раз, при использовании динамического связывания пользователь может просто поменять QT4.dll на свою.
Интересный правда вопрос...Если приложение(вместе с библиотеками) запаковано чем то вроде BoxedApp Packer'а(и предположим ссылка на отдельный бинарник приложения-всеже есть гденибудь на сайте,BoxedApp Packer — естественно распространять нельзя ) — получаем нарушение LGPL?
Здравствуйте, dmitriy_k, Вы писали:
C>>Ещё раз, при использовании динамического связывания пользователь может просто поменять QT4.dll на свою. _>Интересный правда вопрос...Если приложение(вместе с библиотеками) запаковано чем то вроде BoxedApp Packer'а(и предположим ссылка на отдельный бинарник приложения-всеже есть гденибудь на сайте,BoxedApp Packer — естественно распространять нельзя ) — получаем нарушение LGPL?
Для соблюдения LGPL нужно указать где-нибудь в документации URL, по которому можно взять отдельный бинарик с библиотеками. LGPL не требует, чтобы исходные материалы распространялись в каждой поставке.