Building Static Qt 6 for Desktop OpenGL on Ubuntu & Ubuntu WSL Статическая сборка Qt 6 для Desktop OpenGL в Ubuntu и Ubuntu WSL

Key Results:
  • Installation folder: ~/libs/qt-6.12.0-static-gcc — only ~249 MB
  • Clone time: ~2 minutes (shallow clone of qtbase only)
  • Build time: ~15–20 minutes on modern multi-core CPUs with SSD
  • Release stripped binary: ~25 MB (compresses down to ~10 MB) with zero external Qt shared library dependencies!
  • Works on both Native Ubuntu (22.04 / 24.04 LTS) and Ubuntu WSL2 (with WSLg for hardware-accelerated GUI window rendering out of the box).
Ключевые результаты:
  • Папка установки: ~/libs/qt-6.12.0-static-gcc — всего ~249 МБ
  • Время клонирования: ~2 минуты (только qtbase)
  • Время сборки: ~15–20 минут на многоядерном процессоре с SSD
  • Финальный сжатый (stripped) бинарник: ~25 МБ (примерно 10 МБ в архиве) без каких-либо внешних зависимостей от библиотек Qt!
  • Подходит как для нативной Ubuntu (22.04 / 24.04 LTS), так и для Ubuntu WSL2 (с поддержкой WSLg для отображения GUI с аппаратным ускорением прямо из коробки).

1. (For Windows Users) Install Ubuntu WSL 1. (Для пользователей Windows) Установка Ubuntu WSL

If you are on Windows and want to develop inside Linux without dual-booting or heavy virtual machines, open CMD (or PowerShell) as Administrator and install Ubuntu under WSL: Если вы работаете в Windows и хотите разрабатывать под Linux без второй ОС и тяжелых виртуальных машин, откройте CMD (или PowerShell) от имени администратора и установите Ubuntu для WSL:

wsl --install -d Ubuntu

Restart your PC if prompted. Windows 11 and modern Windows 10 include WSLg, allowing Linux GUI and OpenGL applications to render directly on your Windows desktop with hardware acceleration. Перезагрузите ПК, если потребуется. В Windows 11 и обновленной Windows 10 встроен компонент WSLg, который позволяет выводить окна графических и OpenGL-приложений Linux прямо на рабочий стол Windows с аппаратным ускорением.

2. Prerequisites & System Packages 2. Необходимые системные пакеты

Inside your Ubuntu terminal (or Ubuntu WSL via wsl -d Ubuntu), install the compiler toolchain, CMake, Ninja, OpenGL development files, Wayland, and X11/xcb libraries: В терминале Ubuntu (или Ubuntu WSL через wsl -d Ubuntu) установите компиляторы GCC/G++, CMake, Ninja, заголовочные файлы OpenGL, Wayland и библиотеки X11/xcb:

sudo apt update && sudo apt install -y \
  build-essential \
  cmake \
  ninja-build \
  git \
  libgl1-mesa-dev \
  libglu1-mesa-dev \
  libegl1-mesa-dev \
  libx11-dev \
  libx11-xcb-dev \
  libxext-dev \
  libxfixes-dev \
  libxi-dev \
  libxrender-dev \
  libxcb1-dev \
  libxcb-glx0-dev \
  libxcb-keysyms1-dev \
  libxcb-image0-dev \
  libxcb-shm0-dev \
  libxcb-icccm4-dev \
  libxcb-sync-dev \
  libxcb-xfixes0-dev \
  libxcb-shape0-dev \
  libxcb-randr0-dev \
  libxcb-render-util0-dev \
  libxcb-xinerama0-dev \
  libxcb-xkb-dev \
  libxkbcommon-dev \
  libxkbcommon-x11-dev \
  libfontconfig1-dev \
  libfreetype6-dev \
  libwayland-dev \
  wayland-protocols \
  libdrm-dev \
  libgbm-dev
For Native Ubuntu users: You can download the official standalone Qt Creator installer directly from Qt Creator GitHub Releases (download the .run installer, make it executable with chmod +x, and run it).
For WSL users: The command-line workflow (CMake + Ninja) described below is the fastest and recommended approach.
Для пользователей нативной Ubuntu: Вы можете скачать официальный автономный установщик Qt Creator со страницы релизов Qt Creator на GitHub (скачайте .run установщик, сделайте исполняемым через chmod +x и запустите).
Для пользователей WSL: Рекомендуется использовать сборку через терминал (CMake + Ninja), описанную далее.

3. Clone Only qtbase 3. Клонирование только модуля qtbase

If you are on Windows, open your terminal (PowerShell or Windows Terminal) and explicitly launch your Ubuntu distribution using wsl -d Ubuntu (especially important if you have other distros like Fedora installed). Then create the source directory and clone qtbase: Если вы работаете в Windows, откройте терминал (PowerShell или Windows Terminal) и запустите именно дистрибутив Ubuntu командой wsl -d Ubuntu (это важно, если у вас установлены другие дистрибутивы, например Fedora). Затем создайте каталог и склонируйте qtbase:

# Launch specifically Ubuntu WSL (if on Windows)
wsl -d Ubuntu

# Create source directory in Linux home
mkdir -p ~/QtSource
cd ~/QtSource

# Shallow clone of qtbase only (~150 MB download)
git clone --depth 1 -b v6.12.0 https://code.qt.io/qt/qtbase.git

4. Configure for Static Build into ~/libs/qt-6.12.0-static-gcc 4. Конфигурация статической сборки с установкой в ~/libs/qt-6.12.0-static-gcc

Create a separate build directory and configure Qt using the configure script. We include -no-feature-sql because SQL modules are not needed for pure OpenGL/QtWidgets applications and significantly speeds up compilation: Создайте отдельную папку для сборки и запустите конфигурацию с помощью скрипта configure. Мы указываем -no-feature-sql, так как SQL не требуется для чистых приложений OpenGL/QtWidgets и существенно ускоряет сборку:

mkdir -p ~/QtBuild
cd ~/QtBuild

~/QtSource/qtbase/configure \
  -static \
  -release \
  -prefix ~/libs/qt-6.12.0-static-gcc \
  -opengl desktop \
  -no-feature-sql \
  -nomake examples \
  -nomake tests
Important: Wait until CMake finishes completely and prints Qt is now configured for building. Just run 'ninja'. before proceeding to the next step. Важно: Дождитесь, пока CMake полностью завершит конфигурацию и выведет сообщение Qt is now configured for building. Just run 'ninja'., прежде чем переходить к компиляции.

5. Compile and Install 5. Компиляция и установка

Run ninja (limiting to -j 4 is recommended in WSL2 to prevent memory exhaustion), then install: Запустите ninja (рекомендуется ограничить до -j 4 в WSL2, чтобы избежать исчерпания оперативной памяти), а затем установите:

ninja -j 4
ninja install
After ninja install finishes, you can safely delete ~/QtBuild and ~/QtSource to free up disk space. После завершения ninja install вы можете безопасно удалить каталоги ~/QtBuild и ~/QtSource, чтобы освободить место на диске.

6. Project Configuration: Linking Static Qt with Wayland Support 6. Конфигурация проекта: линковка статического Qt с поддержкой Wayland

You can clone or download the complete ready-to-run demo project directly from GitHub: github.com/ivan-enzhaev/opengl-test-qt6-desktop Вы можете клонировать или скачать готовый к запуску демонстрационный проект с GitHub: github.com/ivan-enzhaev/opengl-test-qt6-desktop

git clone https://github.com/ivan-enzhaev/opengl-test-qt6-desktop.git
cd opengl-test-qt6-desktop

In static Qt on Linux/WSL, platform plugins are static archives (e.g. libqwayland.a). To ensure your application initializes the Wayland window manager correctly: В статической сборке Qt под Linux/WSL платформенные плагины представляют собой статические архивы (например, libqwayland.a). Чтобы приложение корректно инициализировало окно под Wayland/WSLg:

1. In your main.cpp: 1. В вашем файле main.cpp:

Import the static Wayland plugin near the top of main.cpp: Импортируйте статический плагин Wayland в начале main.cpp:

#if defined(__linux__)
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWaylandIntegrationPlugin)
#endif

2. Clean CMakeLists.txt Reference: 2. Содержимое файла CMakeLists.txt:

Use qt_add_executable, conditionally look up WaylandClient on Linux, and link the platform plugin: Используйте qt_add_executable, проверяйте WaylandClient только для Linux и подключайте платформенный плагин:

cmake_minimum_required(VERSION 3.21)
project(opengl-test-qt6-desktop LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

# -----------------------------------------------------------------------------
# Locate Packages
# -----------------------------------------------------------------------------
find_package(Qt6 REQUIRED COMPONENTS Widgets OpenGLWidgets)

# Wayland is only present and required on Linux (Ubuntu / WSL)
if(UNIX AND NOT APPLE)
    find_package(Qt6 REQUIRED COMPONENTS WaylandClient)
endif()

# -----------------------------------------------------------------------------
# Executable Target
# -----------------------------------------------------------------------------
qt_add_executable(app
    src/main.cpp
    src/mainwindow.h
    src/mainwindow.cpp
)

target_link_options(app PRIVATE -static-libgcc -static-libstdc++)

# -----------------------------------------------------------------------------
# Platform-Specific Link Flags & Libraries
# -----------------------------------------------------------------------------
if(WIN32)
    target_link_libraries(app PRIVATE
        Qt6::Widgets
        Qt6::OpenGLWidgets
        opengl32
    )
    target_link_options(app PRIVATE -static)
else()
    target_link_libraries(app PRIVATE
        $ENV{HOME}/libs/qt-6.12.0-static-gcc/plugins/platforms/libqwayland.a
        Qt6::Widgets
        Qt6::OpenGLWidgets
        Qt6::WaylandClient
        GL
    )
endif()

# Auto-strip symbols in Release builds for GCC / Clang
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    target_link_options(app PRIVATE
        $<$<CONFIG:Release>:-s>
    )
endif()

3. Build and Run via Terminal: 3. Сборка и запуск через терминал:

mkdir dist && cd dist

# Configure pointing to your static Qt
cmake -DCMAKE_PREFIX_PATH=$HOME/libs/qt-6.12.0-static-gcc \
      -DCMAKE_BUILD_TYPE=Release \
      -GNinja ..

# Build
ninja

# Run! Window appears seamlessly on Windows desktop via WSLg
./app

7. (Optional) Using Qt Creator on Native Ubuntu 7. (Опционально) Настройка в Qt Creator на нативной Ubuntu

If you prefer using the Qt Creator IDE on Native Ubuntu, open Edit > Preferences: Если вы предпочитаете IDE Qt Creator на нативной Ubuntu, откройте Edit > Preferences:

  1. Qt Versions: Click Add and choose ~/libs/qt-6.12.0-static-gcc/bin/qmake. Qt Versions: Нажмите Add и укажите ~/libs/qt-6.12.0-static-gcc/bin/qmake.
  2. Compilers: System GCC/G++ is auto-detected automatically. Compilers: Системный GCC/G++ определится автоматически в разделе Auto-detected.
  3. Kits: Click Add:
    • Name: Qt 6.12.0 Static (GCC Linux)
    • Compiler C/C++: GCC / G++
    • Qt version: The static version registered in step 1
    • CMake Generator: Ninja
    Kits: Нажмите Add:
    • Name: Qt 6.12.0 Static (GCC Linux)
    • Compiler C/C++: GCC / G++
    • Qt version: Добавленная статическая версия из шага 1
    • CMake Generator: Ninja
Important Note on LGPLv3 & Static Linking Важное примечание о лицензии LGPLv3 и статической линковке
If you distribute a statically built Qt application under the free LGPLv3 license, you must choose one of two options:
  1. Make your project open source and share your full source code.
  2. Keep your source code private, but provide your compiled .o object files so users can relink the application with their own Qt library version.
Если вы распространяете статически собранное приложение Qt под бесплатной лицензией LGPLv3, вам необходимо выбрать один из двух вариантов:
  1. Сделать проект открытым (Open Source) и опубликовать весь исходный код.
  2. Оставить исходный код закрытым, но предоставить скомпилированные объектные файлы (.o), чтобы пользователи могли перелинковать приложение со своей версией библиотеки Qt.

Complete source code for this project is available on GitHub: Полный исходный код проекта доступен на GitHub:

View on GitHub Смотреть на GitHub

Support My Work Поддержать проект

If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.

Sberbank (Russia only) Сбербанк (только для РФ)

Sberbank SBP QR Code

Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)

+7 (917) 212-29-59

USDT TRC20

USDT TRC20 QR Code

Support via Cryptocurrency Поддержка криптовалютой

TMtY1YifNf6FKvgeFmqKGQR4NStKr3csGp