Предисловие

Как Вы возможно знаете на территории РФ более недоступен Qt. Также в этот момент мне потребовалось реализовать кросс-компиляцию своего проекта под разные ОС. В ходе реализации кросс-компиляции обнаружилось, что можно совершенно легально использовать Qt, да еще и реализовать кросс-компиляцию.

Windows 11

Используя метод проб и ошибок выяснилось, что наиболее хорошо подходит для данных целей Windows 11, т.к. под него есть X Server, причем абсолютно бесплатный. Также не может не радовать скорость работы WSL2 под данной ОС. Итак, не буду томить - переходим к реализации.

Установка WSL2 + X Server

Сразу оговорюсь, речь идет про системы на x64 архитектуре (Intel/AMD). На ARM тоже можно, но работоспособность не гарантируется.

Сперва рекомендую активировать WSL2, для этого можно выполнить команды PowerShell (напоминаю, что нужно запускать его от имени Администратора):

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

Также скачаем и установим сам WSL2 с официального сайта Microsoft

После выполненных действий рекомендую перезагрузить PC, т.к. изменения серьезные.

Сделаем WSL2 основным WSL через PowerShell

wsl --set-default-version 2

Теперь можем установить Ubuntu из Windows Store
После запускаем и устанавливаем Ubuntu (данный процесс можете загуглить - там нет ничего сложного)

Затем поставим X Server, благодаря которой мы сможем запускать графические приложения Linux на Windows. Ссылка на Windows Store

Запустите Windows Subsystem for Linux (X Server) и дождитесь появления ввода окна команд - это требуется, чтоб X Server прописал все зависимости.

Ещё раз перезагрузим PC, т.к. опять же были внесены крупные изменения.

Установка Qt Creator

После перезагрузки открываем Windows Subsystem for Linux (X Server) и ждем появления окна ввода команд.

Активируем root доступ (да, можно все делать через sudo, но для новичков так проще)

sudo su

После устанавливаем Qt

apt-get update && apt-get install build-essential qt5-default qtcreator qtbase5-examples qtdeclarative5-examples git mesa-common-dev -y

(Код длинный, поэтому лучше копировать через Ctrl+A, Ctrl+C)

Выходим из root и запускаем Qt Creator

exit
qtcreator

Установка кросс-компилятора MXE

Да, вы уже можете писать приложения под Qt. Но все же они будут работать из под Linux. Чтобы иметь возможность компилировать под Windows - нужен кросс-компилятор.

Откроем Ubuntu терминал и скачаем MXE:

git clone https://github.com/mxe/mxe.git

Установим необходимые пакеты:

sudo apt-get update && sudo apt-get install autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool-bin libxml-parser-perl lzip make openssl p7zip-full patch perl python3 python3-mako ruby sed unzip wget xz-utils python-is-python3 g++-multilib libc6-dev-i386 texinfo wine -y

(Код длинный, поэтому лучше копировать через Ctrl+A, Ctrl+C)

Перейдем в директорию mxe

cd mxe

И запускаем сборку x86 версии (можете пойти попить чайку - это займет 2-3 часа)

make qt5

И запускаем сборку x64 версии (можете пойти попить чайку - это займет 2-3 часа)

make MXE_TARGETS=x86_64-w64-mingw32.static qt5

После сборки - привязываем Qt к сборкам, аналогично как если бы была статическая компиляция.

Пути к сборкам: <mxe root>/usr/bin/<Build architecture>

Подробнее о привязке - можете посмотреть видео с YouTube (специально начало пропустил до привязки - по времени 16:12)

Итог

В итоге получим систему кросс-компиляции под Linux и Windows. А также совершенно легально (без VPN и прочем мути) установленный Qt Creator.

Послесловие

Изначально делал для себя, но метод очень понравился, поэтому решил поделиться. Если есть вопросы/предложения - пишите комментарии.

Спасибо за внимание!

С уважением,

Alrott SlimRG

Комментарии (34)


  1. maisvendoo
    04.06.2022 01:37
    +5

    Если что - в Arch Linux с каждым обновлением прилетает свежий Qt. потому что в Linux-системах компиляцию на себя берут майтейнеры, а они как видно, остаются пока вне санкций.

    А вот под виндой да, боль.... Так что спасибо за статью, забрал в закладки

    Года три назад я собирал Qt из сорцов под винду для статической компоновки, пока не открыл для себя windeployqt.exe ) На i7-2600K выходило не слишком долго.

    И запускаем сборку x64 версии (можете пойти попить чайку - это займет 2-3 часа)

    а на нынешнем моем i9-10900KF наверное выйдет чутка пошустрее)


    1. SlimRG Автор
      04.06.2022 11:59
      +3

      Ох, я собирал за 2 часа на системе с 2мя CPU (40 ядер на 3 Ггц всего) и 1024 Gb операвки. Не думаю, что у вас будет быстрее)


      1. maisvendoo
        04.06.2022 18:42
        +6

        терабайт оперативки... м-да, круто


        1. sdore
          05.06.2022 04:06

          А я-то вчитываюсь: со мной что-то не так, или правда так написано.


          1. SlimRG Автор
            05.06.2022 14:45

            так и есть


  1. up40k
    04.06.2022 03:06
    +13

    Windows 11, т.к. под него есть X Server

    Там целая отдельная виртуалка с Wayland и пробросом памяти в видеокарту (который работает вот уже год кое как, но надежда есть; в софт рендере на Intel встройках шустрее, чем с нативным ускорением, но с более ранними драйверами вообще только софтверно работало, так что не со стороны MS, так хоть со стороны интела прогресс есть; с видеоускорителями других производителей - вариативно, но софтрендер на современных CPU работает прям хорошо, если не работаете с графикой).

    Также скачаем и установим сам WSL2 с официального сайта Microsoft

    Теперь можем установить Ubuntu из Windows Store

    wsl --install и wsl --update чем не угодили?

    Затем поставим X Server, благодаря которой мы сможем запускать графические приложения Linux на Windows. Ссылка на Windows Store

    Зачем вы ставите превью, да еще из стора (у версии которого есть свои ограничения) поверх системного компонента? Оно всё доступно в стабильном релизе. Сам wslg обновляется сейчас крайне редко и коммиты не несут каких-то особых новшеств, какие конкретно преимущества даёт превью?

    Ещё раз перезагрузим PC, т.к. опять же были внесены крупные изменения.

    Вы уверены?

    sudo su

    sudo -i

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


    1. SlimRG Автор
      04.06.2022 12:03
      +1

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

      Ох, как же Вы правы...
      P.S. На мой взгляд такой конфиг работает шустрее и стабильнее, поэтому Preview.


      1. sdore
        05.06.2022 04:07

        На ваш взгляд, или по вашему опыту?


        1. SlimRG Автор
          05.06.2022 14:46

          я несколько способов перепробовал - по моим ощущениям получилось так.
          синтетические тесты не проводил


  1. deema35
    04.06.2022 03:46
    +9

    В Msys2 есть qt6. И в отличии от wsl это не виртуальная машина, а программный пакет скомпилированный под Windows.


    1. SlimRG Автор
      04.06.2022 14:32
      -2

      Qt6 ещё сырой, а также не поддерживает Windows 7, 8, 8.1, а также UWP


      1. me21
        04.06.2022 15:04
        +4

        Там и qt5 есть


  1. RussianWarShip
    04.06.2022 08:43
    +13

    Как Вы возможно знаете на территории РФ более недоступен Qt.

    Если Вы о недоступности https://download.qt.io, то таки да. Но есть список зеркал https://download.qt.io/static/mirrorlist, в котором можно найти варианты без блокировки, например https://qt-mirror.dannhauer.de.


    1. abagnale
      04.06.2022 10:24
      +3

      О, сначала в марте только account.qt.io был заблокирован для адресов из России, насколько я помню, то есть нельзя было загрузить бинарники через установщик, а теперь действительно, не даёт также загрузить и снапшоты исходников с download.qt.io.

      С бинарниками ещё можно было понять, компания тратит свои ресурсы на сборку, так что наверное могут решать, с кем делиться, но не давать грузить GPLv3 исходники - вот это интересный поворот.

      Ну, к Git репозиторию доступ пока не закрыли:

      $ git clone --depth 1 -b 6.3.0 git://code.qt.io/qt/qt5.git


      1. me21
        04.06.2022 11:32
        +2

        Так на download.qt.io вроде бинарники и лежат. Исходники, как вы сами сказали, вот они - клонируйте репозиторий.

        Формально, как мне кажется, GPL не нарушена - доступ к исходникам для желающих есть.


        1. CaptainFlint
          04.06.2022 12:40
          +1

          Она так и так не была бы нарушена. Исходники обязаны предоставлять не всему миру, а только тем, кто легальным образом заполучил продукт. См., например, RHEL. И бинарники, и исходники доступны только владельцам подписок, и это вполне в рамках GPL.


          1. abagnale
            04.06.2022 13:06
            +2

            Исходники обязаны предоставлять не всему миру, а только тем, кто легальным образом заполучил продукт

            Это верно, но вот последняя версия Qt, вышедшая до известных специальных событий, была 6.2.0, и пользователи из России получили её (и все предыдущие версии) легальным образом, а теперь вдруг потеряли доступ к загрузкам, так что здесь я не могу сказать, что условия лицензии соблюдены. Вот если бы только 6.3.0 (вышла в апреле 2022) была недоступна, то наверное да.

            Но так как всё ещё доступно клонирование Git репозитория, то также нельзя и сказать, что условия лицензии нарушены. В конце концов, упаковка и хостинг снапшотов это тоже ресурсы компании, так что вероятно они могут распоряжаться доступом к ним по своему усмотрению.

            Поэтому я и сказал, что это интересный поворот, а не то что требования GPLv3 нарушены.


            1. CaptainFlint
              04.06.2022 15:04
              +1

              последняя версия Qt, вышедшая до известных специальных событий, была 6.2.0, и пользователи из России получили её (и все предыдущие версии) легальным образом, а теперь вдруг потеряли доступ к загрузкам, так что здесь я не могу сказать, что условия лицензии соблюдены
              Я не юрист, но не думаю, что лицензия обязывает предоставлять исходники ныне и присно и во веки веков. Бинарники были доступны — сорсы были доступны. Перестали предоставлять — всё, кто не успел, тот опоздал. Ну или просите у тех, кто успел, GPL разрешает делиться.
              В конце концов компании и сайты могут закрываться, и что, подавать на них в суд, что они перестали выкладывать сорсы продукта, который там когда-то 25 лет назад лежал?

              P. S. Я понимаю, что раз доступ к репозиторию открыт, то это всё не играет роли, лицензия в любом случае не нарушена. Просто обсуждаю гипотетическую ситуацию, если бы общедоступного репозитория не было совсем.


              1. abagnale
                04.06.2022 15:35
                +2

                Да, ситуация любопытная. Конечно, если бы The Qt Company закрылась или у них бы временно сломался сайт, то вряд ли можно было бы предъявлять им претензии (по крайней мере, в первом случае), что они не дают исходники. Но компания работает, и сайт тоже функционирует, однако некоторые пользователи лишены доступа к загрузкам.

                Вот я простой программист Иван город Тверь. Установил в январе на свой компьютер Qt 5.15.2, без исходников, только бинарники. Работаю над проектом своим, Qt использую под GPLv3, проект соответственно тоже под этой лицензией. И тут мне понадобились сейчас в июне исходники Qt 5.15.2, а на той странице, откуда я загружал установщик, их теперь загрузить нельзя (как и сам установщик). Пользователям с определёнными IP адресами можно, а мне нельзя.

                Хорошо что на Хабре подсказали, что Git репозиторий ещё доступен, а то было бы совсем странно. Особенно в FSF бы удивились, наверное.


                1. CaptainFlint
                  04.06.2022 16:01
                  +1

                  Я тут не вижу принципиальных различий с другой ситуацией: пользуюсь я условной программой SuperMagic 1.2, которую когда-то скачал с сайта разработчика, и она была GPL. С тех пор программа развивалась, вышла версия 2.0 и сменила лицензию на проприетарную. А версию 1.2 с сайта удалили (и бинарники, и исходники). Так вот, ситуация эта неприятная, но я не думаю, что она нарушает GPL. То, что я не озаботился стащить исходник, когда всё было доступно, это моя головная боль, разработчик честно предоставлял такую возможность, пока программа распространялась.

                  Так же и тут. Qt перестали распространять всему миру, а стали с определёнными ограничениями. Неприятно, но это их продукт и они имеют полное право так делать. Пока продукт был доступен, его можно было скачать с исходниками. Теперь нельзя. Вернее, можно, но не всем (и не столь принципиально, по какому критерию идёт ограничение: по IP или по наличию платной подписки). Если пользователь когда-то успел скачать GPL-продукт, может продолжать пользоваться, но если в настоящий момент компания не предоставляет возможности получить этот продукт, то и исходники больше предоставлять не обязана. Я так вижу эту ситуацию с правовой точки зрения.


                1. Playa
                  04.06.2022 21:15

                  К слову, в июне вы можете скачать Qt 5.15.4 - тыц


                  1. abagnale
                    04.06.2022 22:29

                    Не с российских IP адресов, про что и речь.


        1. abagnale
          04.06.2022 12:51

          Бинарники там тоже лежат, но я оттуда гружу в основном снапшоты исходников, чтобы не ждать по часу, пока все сабмодули инициализируются при клонировании через Git.


  1. ZhilkinSerg
    04.06.2022 09:21
    +2

    msys? vcpkg?


    1. Sazonov
      04.06.2022 10:50

      Ставил через vcpkg на винду qt6. Полёт отличный. Единственный нюанс - надо максимально короткий buildtree для сборки qtwebengine указать (и да, он очень долго собирается, но думаю что это из-за корпоративного антивируса).


  1. vadimr
    04.06.2022 09:58
    +1

    Ну так-то почти любой дистрибутив линукса включает в себя Qt.


  1. kunitsyn
    04.06.2022 11:09
    +6

    Легальность использования Qt и его тулзов не имеет ничего общего с тем, использовали вы VPN для скачивания или нет. Легальность определяется исключительно EULA: https://code.qt.io/cgit/qt/qt5.git/tree/LICENSE.QT-LICENSE-AGREEMENT Пункт 14.8 говорит нам, что нарушать экспортные санкции нехорошо, но в области программного обеспечения санкции против РФ ещё вроде как никто не вводил.

    Ну и в самой РФ, насколько мне известно, VPN всё ещё легальны.


    1. vikarti
      04.06.2022 11:32

      А разве Qt не GPL'ная в том числе?
      Или речь именно про честно купленную платную Qt которую не дают скачать?


      1. DerRotBaron
        04.06.2022 11:48
        +3

        Да. Более того лицензионно чистая LTS ветка от KDE доступна без блокировок (пока РКН ее не заблочит снова в рамках ковровых блокировок)


  1. SilverTrouse
    04.06.2022 12:05
    +4

    Кто говорите о запрете Qt в России не все так однозначно. Qt - и в принципе все что у них опенсорсное мы можем спокойно скачать они просто запретили нам использовать прекомпилинные либы ( прекомпиленные ими)


  1. Playa
    04.06.2022 12:57
    +9

    Собрать под windows кросс-компилятором в виртуальной машине, находясь при этом под той же windows - это отдельный вид мазохизма


    1. mapron
      04.06.2022 13:43

      Ну чет да, я вот QtC под Windows собираю: clone / cmake / ninja, все, непонятно зачем кросскомпиляция :)
      Visual studio компилятор в Community бесплатный (я думаю сборка Qt вполне соответствует Community лицензии)


  1. theLastOfCats
    05.06.2022 03:38
    +1

    Зачем ставить X Server если WSL умеет в GUI начиная с 22000?

    https://github.com/microsoft/wslg


  1. alxndrlsn
    05.06.2022 14:47

    После устанавливаем Qt

    Мы под Debian 10-11 устанавливали с помощью онлайн установщика незадолго до санкций Qt5.15+ по списку:

    • кроме перечисленных в статье ставили дополнительно: libgl1-mesa-dev gcc g++ make libssl-dev sqlite3 sqlitebrowser

    • требования под Qt5 для Debian X11: https://doc.qt.io/qt-5/linux.html

    • а также полезное ПО: preload lvm2 gedit numlockx p7zip-full p7zip-rar