GNU/Linux >> Znalost Linux >  >> Linux

Jak nakonfiguruji Qt pro křížovou kompilaci z Linuxu do cíle Windows?

Dalším způsobem křížové kompilace softwaru pro Windows na Linuxu je MinGW-w64 toolchain na Archlinuxu. Snadno se používá a udržuje a poskytuje nejnovější verze kompilátoru a mnoho knihoven. Osobně mi to připadá jednodušší než MXE a zdá se, že novější verze knihoven přijímá rychleji.

Nejprve budete potřebovat stroj na bázi oblouku (postačí virtuální stroj nebo docker kontejner). Nemusí to být Arch Linux, poslouží i deriváty. Použil jsem Manjaro Linux. Většina balíčků MinGW-w64 není k dispozici v oficiálních repozitářích Arch, ale je jich spousta v AUR. Výchozí správce balíčků pro Arch (Pacman) nepodporuje instalaci přímo z AUR, takže budete muset nainstalovat a používat obal AUR jako yay nebo yaourt. Pak je instalace MinGW-w64 verze Qt5 a knihoven Boost tak snadná jako:

yay -Sy mingw-w64-qt5-base mingw-w64-boost
#yaourt -Sy mingw-w64-qt5-base mingw-w64-qt5-boost #if you use yaourt

Tím se také nainstaluje MinGW-w64 toolchain (mingw-w64-gcc ) a další závislosti. Křížová kompilace Qt projektu pro Windows (x64) je pak stejně jednoduchá jako:

x86_64-w64-mingw32-qmake-qt5
make

Pro nasazení programu budete muset zkopírovat odpovídající dll z /usr/x86_64-w64-mingw32/bin/ . Obvykle budete například muset zkopírovat /usr/x86_64-w64-mingw32/lib/qt/plugins/platforms/qwindows.dll do program.exe_dir/platforms/qwindows.dll .

Chcete-li získat 32bitovou verzi, stačí použít i686-w64-mingw32-qmake-qt5 namísto. Projekty založené na Cmake fungují stejně snadno s x86_64-w64-mingw32-cmake .Tento přístup se mi velmi osvědčil, bylo nejsnazší nastavit, udržovat a rozšiřovat. Hodí se také se službami průběžné integrace. K dispozici jsou také obrázky dockeru.

Řekněme například, že chci vytvořit grafické uživatelské rozhraní pro stahování titulků QNapi. Mohl bych to udělat ve dvou krocích:

  1. Spusťte ukotvitelný kontejner:
sudo docker run -it burningdaylight/mingw-arch:qt /bin/bash
  1. Klonujte a zkompilujte QNapi
git clone --recursive 'https://github.com/QNapi/qnapi.git' 
cd qnapi/ 
x86_64-w64-mingw32-qmake-qt5
make

A je to! V mnoha případech to bude tak snadné. Přidání vlastních knihoven do úložiště balíčků (AUR) je také jednoduché. Budete muset napsat soubor PKBUILD, který je tak intuitivní, jak jen může být, viz například mingw-w64-rapidjson.


(Toto je aktualizace odpovědi @Tshepang, protože MXE se od jeho odpovědi vyvinulo)

Budování Qt

Spíše než pomocí make qt pro sestavení Qt můžete použít MXE_TARGETS k ovládání vašeho cílového stroje a toolchainu (32- nebo 64bitového). MXE začalo používat .static a .shared jako součást názvu cíle, který ukazuje, jaký typ knihovny chcete vytvořit.

# The following is the same as `make qt`, see explanation on default settings after the code block.
make qt MXE_TARGETS=i686-w64-mingw32.static   # MinGW-w64, 32-bit, static libs

# Other targets you can use:
make qt MXE_TARGETS=x86_64-w64-mingw32.static # MinGW-w64, 64-bit, static libs
make qt MXE_TARGETS=i686-w64-mingw32.shared   # MinGW-w64, 32-bit, shared libs

# You can even specify two targets, and they are built in one run:
# (And that's why it is MXE_TARGET**S**, not MXE_TARGET ;)
# MinGW-w64, both 32- and 64-bit, static libs
make qt MXE_TARGETS='i686-w64-mingw32.static x86_64-w64-mingw32.static'

V původní odpovědi @Tshepang neuvedl MXE_TARGETS a použije se výchozí. V době, kdy psal svou odpověď, byla výchozí hodnota i686-pc-mingw32 , nyní je to i686-w64-mingw32.static . Pokud explicitně nastavíte MXE_TARGETS na i686-w64-mingw32 s vynecháním .static , vytiskne se varování, protože tato syntaxe je nyní zastaralá. Pokud se pokusíte nastavit cíl na i686-pc-mingw32 , zobrazí se chyba, protože MXE odebrala podporu pro MinGW.org (tj. i686-pc-mingw32).

Spuštění qmake

Jak jsme změnili MXE_TARGETS , <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake příkaz již nebude fungovat. Nyní, co musíte udělat, je:

<mxe root>/usr/<TARGET>/qt/bin/qmake

Pokud jste nezadali MXE_TARGETS , proveďte toto:

<mxe root>/usr/i686-w64-mingw32.static/qt/bin/qmake

Aktualizace: Nová výchozí hodnota je nyní i686-w64-mingw32.static


Stačí použít M cross environment (MXE). Zbavuje celý proces bolesti:

  • Získejte to:

    $ git clone https://github.com/mxe/mxe.git
    
  • Nainstalujte závislosti sestavení

  • Sestavte Qt pro Windows, jeho závislosti a nástroje pro křížové sestavení; na rychlém počítači se slušným přístupem k internetu to zabere asi hodinu; velikost stahování je asi 500 MB:

    $ cd mxe && make qt
    
  • Přejděte do adresáře své aplikace a přidejte nástroje pro křížové sestavení do PATH proměnná prostředí:

    $ export PATH=<mxe root>/usr/bin:$PATH
    
  • Spusťte nástroj generátoru Qt Makefile a poté sestavte:

    $ <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake && make
    
  • Binární soubor byste měli najít v adresáři ./release:

    $ wine release/foo.exe
    

Několik poznámek :

  • Použijte hlavní větev úložiště MXE; zdá se, že se mu dostává mnohem více lásky od vývojového týmu.

  • Výstupem je 32bitový statický binární soubor, který bude dobře fungovat na 64bitovém systému Windows.


Dobře, myslím, že jsem na to přišel.

Částečně založeno na https://github.com/mxe/mxe/blob/master/src/qt.mk a https://www.videolan.org/developers/vlc/contrib/src/qt4/rules.mak

Zdá se, že „zpočátku“, když spustíte configure (s -xtarget atd.), nakonfiguruje a poté spustí vaše „hosts“ gcc pro vytvoření místního binárního souboru ./bin/qmake

 ./configure -xplatform win32-g++ -device-option CROSS_COMPILE=$cross_prefix_here -nomake examples ...

pak spustíte normální "make" a vytvoří to pro mingw

  make
  make install

tak

  1. ano

  2. pouze pokud potřebujete použít něco jiného než msvcrt.dll (jeho výchozí nastavení). I když jsem nikdy nic jiného nepoužil, takže to nevím jistě.

  3. https://stackoverflow.com/a/18792925/32453 uvádí některé konfigurační parametry.


Linux
  1. Jak nastavit statickou IP adresu a nakonfigurovat síť v Linuxu

  2. Jak SCP z linuxového serveru na Windows klienta

  3. Jak mohu sdílet internet s Windows z mého Linuxového boxu?

  1. Jak vzdálenou plochu z Windows na plochu Linuxu pomocí XRDP

  2. Jak získat přístup ke sdílené složce Windows z Linuxu?

  3. Jak vytvořit testovací balíček Travis CI pro Linux, OS X, Windows?

  1. Jak jsem pomohl mámě přejít z Windows na Linux

  2. Jak nakonfigurovat Openbox pro váš desktop Linux

  3. Jak spustit Windows 95 v Linuxu