Сборка статических приложений на Qt для Windows из Linux

В данном HOWTO мы подробно рассмотрим как собирать статически слинкованные приложения (не требующие библиотек Qt для запуска и работы), написанные на Qt, для Windows прямо из GNU/Linux при помощи компилятора MinGW.

Введение

Для быстрой конфигурации сборки и настройки проектов мы будем использовать свободную IDE Qt Creator, поэтому установим её:

sudo yum -y install qt-creator

Установка компонентов

Для сборки нам потребуется Qt и его заголовочные файлы:

sudo yum -y install qt-devel

MinGW32:

sudo yum -y install mingw32

Qt для MinGW32 и его статически слинкованная версия под платформу Win32:

sudo yum -y install mingw32-qt-*

В случае необходимости, установите и WebKit:

sudo yum -y install mingw32-webkitgtk-static

Настройка среды

Настройки Qt Creator
Настройки Qt Creator

1. Запустите Qt Creator, откройте настройки среды через меню ToolsOptions и переключите его интерфейс на английский язык.

Настройки Qt Creator - страница Build & Run
Настройки Qt Creator — страница Build & Run

2. Перейдите на страницу Build & Run, на вкладку Qt Versions.

Диалог поиска qmake
Диалог поиска qmake

3. Нажмите кнопку Add… и укажите путь к установленному Qt Static. Обычно путь следующий:

/usr/i686-w64-mingw32/bin/qmake-qt4
Qt Creator - Build & Run - результат добавления
Qt Creator — Build & Run — результат добавления

4. Заполните поле Version name, указав там текущую версию Qt с постфиксом Static. Нажмите Apply.

Настройки компиляторов в Qt Creator
Настройки компиляторов в Qt Creator

5. В том же окне настроек перейдите на вкладку Compilers. Нажмите кнопку Add -> MinGW и укажите название (в поле Name рекомендуем указать MinGW32) и путь к компилятору MinGW в Compiler path. В большинстве случаев он будет следующим:

/usr/bin/i686-w64-mingw32-g++

Не забудьте нажать Apply после завершения ввода пути.

Настройка среды сборки Qt Creator
Настройка среды сборки Qt Creator

6. Перейдите на вкладку Kits, нажмите кнопку Add и укажите следующие параметры:

  • NameMinGW32;
  • CompilerMinGW32;
  • DebuggerSystem GDB;
  • Qt version — ваше название с постфиксом Static.

Не забудьте нажать Apply и теперь OK для закрытия формы и применения созданных конфигураций.

Свойства открытого проекта в Qt Creator
Свойства открытого проекта в Qt Creator

7. Откройте свой проект в Qt Creator, выберите на левой панели пункт Projects. Нажмите кнопку Add Kit и выберите созданный нами MinGW32.

Настройка конфигураций сборки проекта в Qt Creator
Настройка конфигураций сборки проекта в Qt Creator

8. Переключитесь на конфигурацию MinGW32, затем в меню Edit build configuration выберите Release. Теперь около Build Steps нажмите кнопку Details и в поле Additional arguments впишите следующее:

CONFIG+=static CONFIG+=staticlib

Сборка проекта

В меню Build IDE Qt Creator выберите пункт Build project. Если вы всё настроили верно, сборка завершится без ошибок и вы получите статически слинкованный exe файл для ОС Microsoft Windows.

4 commentary to post

  1. что делать с этим?

    14:24:33: Настройки не изменились, этап qmake пропускается.
    14:24:33: Запускается: «/usr/bin/make» 
    /usr/bin/make -f Makefile.Release
    make[1]: Entering directory '/home/silvana/projects/build-TyagovyRaschet-MinGW32-Release'
    i686-w64-mingw32-g++ -g -mthreads -Wl,-subsystem,windows -o release/TyagovyRaschet.exe release/main.o release/dialog.o release/section.o release/moc_dialog.o  -L'/usr/i686-w64-mingw32/sys-root/mingw/lib' -lmingw32 -lqtmain4 -lQtGui4 -lQtCore4 
    Makefile.Release:82: recipe for target 'release/TyagovyRaschet.exe' failed
    make[1]: Leaving directory '/home/silvana/projects/build-TyagovyRaschet-MinGW32-Release'
    Makefile:34: recipe for target 'release' failed
    /usr/lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld: cannot find -lqtmain4
    /usr/lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld: cannot find -lQtGui4
    /usr/lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld: cannot find -lQtCore4
    collect2: error: ld returned 1 exit status
    make[1]: *** [release/TyagovyRaschet.exe] Error 1
    make: *** [release] Error 2
    14:24:33: Процесс «/usr/bin/make» завершился с кодом 2.
    Ошибка при сборке/установке проекта TyagovyRaschet (комплект: MinGW32)
    When executing step "Сборка"
    14:24:33: Прошло времени: 00:00.

Обсуждение закрыто.