Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT, mingw] Как получить "всё в одном флаконе"?


Автор: mosg 15.3.2008, 23:46
Доброго времени суток, для знающих и не знающих!

К сожалению, вопрос не относится чисто к тематике кроссплатформ и Qt инструменту, но непосредственно связан с Qt, что и дало повод написать тут.

Вопрос в следующем: как можно собрать "цельную" static программу.exe со встроеной DLL'кой (mingw32.dll), т.е. чтобы после переноса на другой ПК (той же архитектуры и ОС) программа не зудила, что не может найти библиотеку mingw32.dll, которая весит всего-от ~ 12Kb.

Стоит сразу сказать, что это не вопрос, типа "как в статике собрать Qt программу"! Тут проблемы не возникают.

Возможно кто-то уже имел опыт подобной реализации (например, с dll2lib или чем-то другим)

Спасибо!

Автор: powerfox 16.3.2008, 00:18
Цитата(mosg @  16.3.2008,  00:46 Найти цитируемый пост)
mingw32.dll

Должна быть такая же статическая библиотека + вам надо пересобрать Qt (если этого ещё не сделали).
Я бы просто сделал инсталлятор, который бы копировал в системную папку все нужные dll файлы.

Автор: mosg 16.3.2008, 00:37
Цитата(powerfox @ 15.3.2008,  22:18)
Цитата(mosg @  16.3.2008,  00:46 Найти цитируемый пост)
mingw32.dll

Должна быть такая же статическая библиотека + вам надо пересобрать Qt (если этого ещё не сделали).
Я бы просто сделал инсталлятор, который бы копировал в системную папку все нужные dll файлы.

Я немного сглупил, и не сказал, что я компиляю/линкую с помощью средств компирятора MinGW. Т.е. саму библиотеку Qt я уже собрал в статике, и файл приложения весит свои порядочные ~ 9Mb, но т.к. прога собирается с помощью MinGW, то требует наличие файла mingw32.dll.

Инсталятор исключается, это подпрограмма, дополнение, т.е. скорей функция - нужен только exe'шник. Хотя для больших проектов я бы так и поступил.

Автор: mosg 29.3.2008, 22:08
Решение: пересобрать Qt надо без флага (-mthreads), т.к. именно это влияет на "потребность" qt-программы в файле mingw32.dll

Т.е.: 1) в файле ~\Qt\X.X.X\mkspecs\win32-g++\qmake.conf удалить любое упоминание о -mthreads
2) пересобрать Qt, как обычно
3) пересобрать прогу, как обычно

ЗЫ: Да, неудобно, но работает за-то 100% + думаю, что не стоит объяснять последствия такого принудительного отключения флага -mthreads smile

Автор: Denjs 31.3.2008, 12:05
Цитата(mosg @ 29.3.2008,  22:08)
Решение: пересобрать Qt надо без флага (-mthreads), т.к. именно это влияет на "потребность" qt-программы в файле mingw32.dll

где-то была опция для файла поекта которая делает почти тоже самое но бех глобальных последствий.
и там-же было написано что "mthreads нужен для потокобезопасной обработки исключений , и если вы не используете исключения - оно вам не нужно..."... приведено на правах цитаты по памяти... <_<

Автор: mosg 31.3.2008, 21:04
Цитата(Denjs @  31.3.2008,  12:05 Найти цитируемый пост)
где-то была опция для файла поекта которая делает почти тоже самое но бех глобальных последствий.


Интересно изнать, что это за опция smile - было бы намного полезней использовать её, а не иметь 2-3 копий собранных Qt...

Автор: SABROG 1.4.2008, 10:50
Цитата(mosg @  31.3.2008,  21:04 Найти цитируемый пост)
а не иметь 2-3 копий собранных Qt...


При этом каждая по 6-8 гигов...

Автор: archimed7592 4.4.2008, 00:04
Цитата(SABROG @  1.4.2008,  10:50 Найти цитируемый пост)
При этом каждая по 6-8 гигов... 

Это какой версии Qt? 25-ой что ль? smile


Цитата(Denjs @  31.3.2008,  12:05 Найти цитируемый пост)
mthreads нужен для потокобезопасной обработки исключений

Нужен он [ещё] для корректного прохода ислючения через границу dll(даже в одном потоке).

Автор: mosg 12.4.2008, 00:01
Вот, кстати, http://lists.trolltech.com/qt-interest/2006-08/thread00942-0.html достаточно интересная дискуссия касательно тематики поста - для любознательных smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)