|
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
|
|
Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll27.01.2011, 00:55. Показов 100349. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|