|
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
|
|
Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll27.01.2011, 00:55. Показов 99193. Ответов 4
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу перевод буржуйской вики по отлучению программ Qt от своих библиотек.
То есть статической линковке приложений с библиотеками, в результате чего получается автономный исполняемый файл, запускаемый на любом компьютере. Данное руководство актуально для пользователей ОС Windows, до никсов доберемся потом. Если раньше в том же C++ Builder 6 статическая и динамическая линковка задавалась просто установкой и снятием галочки в свойствах проекта, здесь все хуже: нам нужно перекомпилировать и пересобрать весь Qt заново. 1. Для удобства ставим еще один Qt, в другую папку, называем так, чтобы не путаться (я добавляю static в название папки) 2. Далее, для пользователей компилятора MinGW: редактируем файл <QTDIR>\mkspecs\win32-g++\qmake.conf, где <QTDIR> - каталог установки Qt. привожу изменения для разных версий Qt: 4.6 и новее: Добавляем в QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc строку -static -static-libgcc, получаем: QMAKE_LFLAGS = -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc от 4.3 до 4.5: Добавляем в QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc строку -static, получаем: QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc версии ниже 4.2: 1. Из строки QMAKE_CFLAGS_THREAD = -mthreads удяляем -mthreads 2. Из QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc удаляем -mthreads и добавляем -static, получаем: QMAKE_LFLAGS = -static -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc Для пользователей MSVS: Для устранения зависимости от библиотек msvc*.dll. Так же редактируем файл <QTDIR>\mkspecs\win32-[версия MSVS]\qmake.conf, для каждой версии MSVS - свой: msvc для Visual Studio 6 msvc.net для Visual Studio.NET 2002-2003 msvc2005 для Visual Studio.NET 2005 msvc2008 для Visual Studio.NET 2008 Меняем QMAKE_CFLAGS_RELEASE = -O2 -MD на QMAKE_CFLAGS_RELEASE = -O2 -MT Примечание: если параметр равен -O2 -MD -GL, удалите -GL (тестировано на msvc-2008) Для версий старше 4.3.2 нужно еще в этом же файле: (тестировано на Visual Studio 2005 и Visual Studio 2008) заменить CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe на CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target ________________________________________ _____________________ С редактированием файлов закончили, переходим к сборке. 3. Сборка. Открываем консоль Qt Command Prompt того Qt, что для статической линковки (можно и обычную виндовскую - но тогда переменные окружения нужно вручную добавить) и выполняем команды: для MinGW: configure -static -release -no-exceptions (можно еще добавить -nomake-demos -nomake-examples - не собирать примеры и демки, что несколько ускорит процесс, плюс здесь же добавляется поддержка плагинов Qt, но не все плагины доступны для статической линковки в бесплатной версии Qt) затем: mingw32-make sub-src для MSVS: configure -static -release затем: nmake sub-src и запасаемся терпением или идем пить чай, процесс длится минут 20. После нормального завершения процесса наш Qt может собирать программы, не зависящие от его библиотек. 4. Редактируем профили Qt. Заходим в QtCreator (любой из них - профили все-равно общие), открываем проект, заходим в параметры проекта и открываем управлением профилем Qt, там будет список конфигураций, как правило первая - конфигурация AUTO, ее не трогаем (если раньше стоял Qt - там будет еще и список его профилей, при удалении Qt - он реестр за собой не чистит, наглец ))). Находим конфигурацию, где qmake.exe находится в папке со статическим Qt и как-нибудь обзываем профиль, чтобы нам было понятно для чего он и не путаться в дальнейшем. Теперь при входе в "обычный" QtCreator мы будем выбирать профиль проекта "динамический", а для статической сборки - наш "статический" профиль. Добавлено через 14 минут обратите внимание, что Qt командой configure -static -release сконфигурирован для релиза (Release), для использования в режиме отладки (Debug) необходимо пользоваться configure -static -debug или configure -static -debug-and-release Вопросы возникшие на основе этого мануала
41
|
|
| 27.01.2011, 00:55 | |
|
Ответы с готовыми решениями:
4
Отсутствует libgcc_s_dw2-1.dll
Отучение qt 5.0.1 от *.dll |
|
|
|
| 05.12.2011, 14:19 | |
|
По просьбам трудящихся. Сборка статической Qt (MinGW) под винду, с поддержкой OpenSSL:
1. Скачать и установить OpenSSL (для примера в папку Q:\OpenSSL-Win32) (отсюда) 2. Скачать и установить QtSDK (для примера в папку Q:\QtSDK) 3. Скачать исходники Qt http://download.qt.nokia.com/q... -4.7.4.zip и распаковать их в папку (заменить имеющиеся там исходники от установки): Q:\QtSDK\QtSources\4.7.4\ 4. Скопировать: Файлы: Q:\OpenSSL-Win32\lib\libeay32.lib Q:\OpenSSL-Win32\lib\ssleay32.lib в папку: Q:\QtSDK\QtSources\4.7.4\lib\ Файлы: Q:\OpenSSL-Win32\lib\MinGW\libeay32.a Q:\OpenSSL-Win32\lib\MinGW\libeay32.def Q:\OpenSSL-Win32\lib\MinGW\ssleay32.a Q:\OpenSSL-Win32\lib\MinGW\ssleay32.def в папку: Q:\QtSDK\Desktop\Qt\4.7.4\mingw\lib\ Папку: Q:\OpenSSL-Win32\include\ в папку: Q:\QtSDK\QtSources\4.7.4\include т.е. папка Q:\QtSDK\QtSources\4.7.4\include должна будет содержать в себе подпапку Q:\QtSDK\QtSources\4.7.4\include\openssl 5. Открыть блокнотом файл: Q:\QtSDK\QtSources\4.7.4\mkspecs\win32-g++\qmake.conf найти строку, содержащую: QMAKE_LFLAGS удалить ее полностью, и вместо нее вставить: QMAKE_LFLAGS = -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc и сохранить файл. 6. Запустить консоль Qt из «Пуск»→«Программы»→«QtSDK»→«Desktop»→«Qt 4.7.4 for Desktop (MinGW)» В консоли перейти в папку: Q:\QtSDK\QtSources\4.7.4\ с помощью команд: «Q:» (без кавычек, нажать Enter) «cd Q:\QtSDK\QtSources\4.7.4\» (без кавычек, нажать Enter) 7. Сконфигурировать исходники Qt командой: configure -static -debug-and-release -no-exceptions -openssl-linked -nomake demos -nomake examples Ответить на вопросы по лицензии (лицензия OpenSource) 8. Дождаться конца конфигурирования и собрать библиотеку командой (в той же открытой консоли): mingw32-make sub-src и дождаться окончания сборки, после чего консоль можно закрывать. 9. Запустить QtCreator, зайти в меню: «Инструменты» → «Параметры» и в левом меню выбрать пункт Qt4 Кнопкой «Добавить» - добавить созданную статическую сборку, т. е. указать в открывшемся окне файл: Q:\QtSDK\QtSources\4.7.4\bin\qmake.exe и дать ей свое имя (к примеру «Qt 4.7.4 for Desktop - MinGW 4.4 (Static)») Раскрыть область «Подробнее» и нажать кнопку «Собрать все» Открыть проект, зайти в его свойства (слева меню «Проекты») и добавить новую конфигурацию сборки с новым именем (из п.13.) Выбрать тип сборки Релиз (из Релиз или Дебаг) Можно собирать проекты. Видео как это делалось: http://narod.ru/disk/start/01.... pVideo.zip
8
|
|
|
4 / 8 / 0
Регистрация: 22.03.2012
Сообщений: 135
|
|
| 14.07.2012, 01:46 | |
|
Вступление:
В данном уроке я расскажу в картинках как собрать приложение статически/провести статическую линковку/ отучить ваш *.exe от библиотек Qt - кажется это всё одно и тоже по своей сути Пожалуй можно начинать: Лично я всё проделывай со свеженькой на данный момент Qt SDK с сайта Nokia( Qt 4.8 и SDK 1.2.1) Шаг 1. Насколько я сам разобрался для нормальной сборки нам в системе понадобится Perl Я его брал отсюда http://www.perl.org/ Я выбрал версию ActiveState и понятия не имею чем она отличается от Strawberry, но с ним всё работало Затем, насколько я понял, в винде творится жуткий беспорядок с тем, где хранятся либы и нужно вписывать вручную какие-то переменные, короче галочка на скрине должна от всего этого маразма избавить, так что советую её оставить Ура, у нас есть Perl! Шаг 2. Теперь можно приступать к сборке Qt из исходников. Первым делом я предлагаю скачать исходники я взял эти http://download.qt.nokia.com/q... -4.7.4.zip, возможно и посвежей подойдут, но я рисковать не стал теперь нужно распаковать это дело в X:\QtSDK\QtSources\4.7.4\ папок QtSources\4.7.4\ у вас не будет, их нужно создать теперь нам нужно открыть вашим любимым блокнотом файлик X:\QtSDK\QtSources\4.7.4\mkspecs\win32-g++\qmake.conf найти строку, содержащую текст: QMAKE_LFLAGS и привести её к такому вот виду: QMAKE_LFLAGS = -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc и сохранить файл. Теперь нам нужно открыть пропатченный терминал(да простят меня виндузятники, если эта штука не так называется), который можно найти у себя, взглянув на мой скриншот Теперь в этой терминале нам нужно перейти в каталог X:\QtSDK\QtSources\4.7.4\ и забить команду configure -static -debug-and-release -no-exceptions -openssl-linked -nomake demos -nomake examples затем вам предстоит прочесть всё, что вам предложат прочесть и правильно ответить на вопросы дождавшись выполнения команды(конца конфигурирования) и появления приглашения строки ввода, забиваем теперь команду(собираем библиотеку) mingw32-make sub-src после окончания терминал можно закрыть и проделать следующее после того, как нажмёте "Собрать всё" может вывалится вот такая вот с первого взгляда непонятная штука, её я предлагаю просто закрыть и забыть о ней Всё почти готово, осталось открыть свой проект и сделать несколько кликов, как на скринах Всем спасибо за внимание, надеюсь у вас всё получилось. Надеюсь данный урок послужит макетом для более тонкой сборки и настройки вашего окружения Qt.
4
|
|
| 20.07.2012, 01:11 | |||||||
1
|
|||||||
|
Заблокирован
|
||
| 16.08.2012, 12:08 | ||
|
В общем, читал 3 пост этой темы, и есть маленькое недоразумение:
К чему я всё это веду? Дело в том, что если не установлен OpenSSL, то выйдет ошибка при сборке библиотеки (после того, как вы введете команду mingw32-make sub-src). Поэтому набрать нужно: configure -static -debug-and-release -no-exceptions -nomake demos -nomake examples Потом уже mingw32-make sub-src А после того как наберете mingw32-make sub-src, сборка библиотеки будет длиться 1-3 часа (зависит от производительности вашего процессора) ![]() Спасибо за внимание ![]() Добавлено через 27 минут Ксати, всё получилось по 3-му посту (не забудьте, что я написал про аргумент -openssl-linked) ![]() Вот скрин GUI-приложения (статическая, релизная версия - 8,40 МБ).
2
|
||
| 16.08.2012, 12:08 | |
|
Помогаю со студенческими работами здесь
5
Отучение qt 5.1.1 от *.dll MinGW версии 4.5.0 содержит libgcc_s_dw2-1.dll без которой ни одна скомпилированная прога не запускается. А как же запускать проги на других машинах? Eclipse и libgcc_s_dw2-1.dll Точка входа в процедуру не найдена в библиотеке DLL MyLib.dll Не собираются qsqlmysql.dll и qsqlmysqld.dll под qt 5.1.1 mingw4.8 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|