Компиляция QT-программы под Windows — зависимости

    Ради интереса решил пощупать Qt.

    Соответственно, скачал Qt Creator, создал проектик, поигрался с экшнами и прочим. И захотелось проектик этот собрать в .exe-файл.

    Дебаг в рамках Creator выполнялся идеально, а вот после Build — .exe выдал мне требование зависимости mingwm10.dll.

    Полез в Google, и после некоторого времени поиска сообразил скопировать

    C:\QT\QTCreator\bin\mingwm10.dll, а так же
    C:\QT\QTCreator\qt\bin\QtCore4.dll
    C:\QT\QTCreator\qt\bin\QtGui4.dll

    в папку с билдом. Только после этого и заработало.

    Но остаётся проблема последующего распространения программы. Неужели для того, чтобы передать другому человеку своё творение размером в 100 килобайт, надо делать инсталлер, чтобы закидывать вышеуказанные файлы в System32?

    Уважаемые знатоки, просвятите меня — разве никак нельзя собрать проект вместе с зависимостями?
    Может, как-то можно уменьшить объём 13-ти мегабайт библиотек для работы 100 килобайтной программы?

    UPD: Знатоки пишут, что библиотеки обязательны.

    Выбор невелик тогда — или паковать NSISом (получилось 4.5 мегабайта на пустой проект), или же делать сетевой инсталлер с вспомогательной программкой, которая будет тянуть зависимости, или же делать solid — как есть.

    Даже если собирать библиотеки static — то получится просто раздутый .exe-файл

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

      +4
      Неужели чтобы работала 100килобайтная, программа написанная на дотнете, нужно ставить .NET Framework?
        0
        Он входит по умолчанию в дистрибутив винды
        в XP — второй, в Vista — третий

        В любом случае, в VS можно собрать программу с зависимостями в виде библиотек
        +3
        а вы чего ожидали? чтобы она вообще без винды работала?
        0
        У пользователя эти библиотеки должны ведь откуда-то взяться.
          0
          Наверное, некорректно спросил

          «Как скомпилировать так, чтобы из этих библиотек взялось только то, что используется в программе?»

          Как-то так)
            0
            ну так слинкуйте их статически. Линковщик возьмет только то, что реально используется.
            Только обычно используется бОльшая часть кода этих библиотек :)
              0
              а как статически?
              задаю в pro CONFIG+=-static — не катит
              как параметр — нет такого параметра в qmake

              в гугле не могу найти — все пишут что CONFIG+= должен помогать(
                0
                Сконфигурируйте Qt перед сборкой, чтобы она не DLL собирала, а статические библиотеки — configure -static.

                В .pro файлах проекта ничего не нужно изменять.
                  0
                  Правда тривиальное приложение всё равно будет весить 4 метра при этом.
                    0
                    А, понял, спасибо!
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              4.5 мегабайта с ним получилось)
              • НЛО прилетело и опубликовало эту надпись здесь
              0
              Я тоже когда-то столкнулся с этой бедой.

              Однако, у меня эта пара dll-ек заняла в программкой мегабайт шесть. Вроде не слишком много, и можно просто в какой-нибудь папочке/подпапочке проекта держать.
                +3
                От mingw можно отказаться купив коммерческую версию QT (или дождавшись LGPL версии).
                От остального избавится нельзя, но класть эти dll рекомендуется в папку программы, а не System32.
                  0
                  Эх...) Mingw библиотека самая легковесная) Лучшеб наоборот)
                    –1
                    Qt 4.4 собирается студией, пользоваться mingw не обязательно.
                    +3
                    Вы можете пересобрать Qt в режиме static. Для этого в корневом каталоге наберите «configure -static [… нужные опции...]», затем «mingw32-make».
                      0
                      только места вам это все равно не сэкономит — у вас просто будет большой экзешник размером под 16 мегабайт (в release-режиме).
                        0
                        а! То есть библиотеки — as is? Они не могут пересобраться только с нужными функциями?
                          0
                          Может, для этого в заголовках нужно точно указывать, какие именно классы нужны, а не QtCore/QtGui

                          А то я после статической сборки получил под 50 мегов.
                            0
                            Мои проекты не занимают более 20 мегабайт. Попробуйте указывать конкретно те классы, которые вам нужны.
                            0
                            Не могу вам сказать. По своим проектам я вижу, что при статической сборке экзешник получается примерно таким же по размеру, как все DLL-библиотеки (QtCore, QtGui, QtSql, ...), которые он использует. Хотя сравнение, конечно, некорректное.
                              0
                              в Qt3 была возможность собрать статик либы так как душа пожелает… у меня сетевой проект выходил на метр примерно со статической линковкой… но есть ли такая же гибкость в Qt4 не знаю, не пробовал…
                              +1
                              upx'ом можно каким-нибудь еще упаковать, если размер имеет значение.
                                0
                                Спасибо за наводку)

                                Фактически разницы нет если не париться о размере после разворачивания из инсталлера, но штука классная
                            +4
                            Что за дурацкая привычка измерять размер пустого проекта? Вы собираетесь пустой проект распространять? Нет? Тогда смысл?
                            Хочется минимизировать проект? пишите на ассемблере и все собственными руками.

                            Захотелось роскоши? Захотелось красивый интерфейс за пять минут? Соизвольте заплатить свободным местом на диске. А в одном файле это будет или в четырех по-моему нет никакой разницы.

                            И да. Раньше когда в винде не было предустановленного .NET, а это по-моему было еще в XP без сервиспаков, так что не так уж и давно, приходилось с проектом тащить в инсталлере 100мб фреймворка.
                              +1
                              откуда столько агрессии в ответ на вопрос?
                                –3
                                Да агрессия не на вопрос, вопрос то правильный, подход к проблеме не правильный.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                –2
                                добро пожаловать в мир гребаных фреймворков.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое