GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengkonfigurasi Qt untuk kompilasi silang dari target Linux ke Windows?

Cara lain untuk mengkompilasi silang perangkat lunak untuk Windows di Linux adalah toolchain MinGW-w64 di Archlinux. Mudah digunakan dan dipelihara, dan menyediakan versi terbaru dari kompiler dan banyak pustaka. Saya pribadi merasa lebih mudah daripada MXE dan sepertinya lebih cepat mengadopsi versi perpustakaan yang lebih baru.

Pertama, Anda memerlukan mesin berbasis arch (mesin virtual atau wadah buruh pelabuhan sudah cukup). Tidak harus Arch Linux, turunannya juga bisa. Saya menggunakan Manjaro Linux. Sebagian besar paket MinGW-w64 tidak tersedia di repositori resmi Arch, tetapi ada banyak di AUR. Manajer paket default untuk Arch (Pacman) tidak mendukung penginstalan langsung dari AUR, jadi Anda perlu menginstal dan menggunakan pembungkus AUR seperti yay atau yaourt. Kemudian menginstal Qt5 dan Boost library versi MinGW-w64 semudah:

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

Ini juga akan menginstal toolchain MinGW-w64 (mingw-w64-gcc ) dan dependensi lainnya. Mengkompilasi silang proyek Qt untuk windows (x64) semudah:

x86_64-w64-mingw32-qmake-qt5
make

Untuk menerapkan program Anda, Anda perlu menyalin dll yang sesuai dari /usr/x86_64-w64-mingw32/bin/ . Misalnya, Anda biasanya perlu menyalin /usr/x86_64-w64-mingw32/lib/qt/plugins/platforms/qwindows.dll ke program.exe_dir/platforms/qwindows.dll .

Untuk mendapatkan versi 32bit Anda hanya perlu menggunakan i686-w64-mingw32-qmake-qt5 alih-alih. Proyek berbasis Cmake bekerja sama mudahnya dengan x86_64-w64-mingw32-cmake .Pendekatan ini bekerja dengan sangat baik bagi saya, adalah yang paling mudah untuk disiapkan, dipelihara, dan diperluas. Ini juga cocok dengan layanan integrasi berkelanjutan. Tersedia juga gambar buruh pelabuhan.

Sebagai contoh, katakanlah saya ingin membangun GUI pengunduh subtitle QNapi. Saya bisa melakukannya dalam dua langkah:

  1. Mulai wadah buruh pelabuhan:
sudo docker run -it burningdaylight/mingw-arch:qt /bin/bash
  1. Kloning dan kompilasi QNapi
git clone --recursive 'https://github.com/QNapi/qnapi.git' 
cd qnapi/ 
x86_64-w64-mingw32-qmake-qt5
make

Itu dia! Dalam banyak kasus, akan semudah itu. Menambahkan perpustakaan Anda sendiri ke repositori paket (AUR) juga mudah. Anda perlu menulis file PKBUILD, yang seintuitif mungkin, lihat mingw-w64-rapidjson, misalnya.


(Ini adalah pembaruan dari jawaban @Tshepang, karena MXE telah berkembang sejak jawabannya)

Membangun Qt

Daripada menggunakan make qt untuk membangun Qt, Anda dapat menggunakan MXE_TARGETS untuk mengontrol mesin target dan toolchain Anda (32- atau 64-bit). MXE mulai menggunakan .static dan .shared sebagai bagian dari nama target untuk menunjukkan jenis lib mana yang ingin Anda buat.

# 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'

Dalam jawaban asli @Tshepang, dia tidak menyebutkan MXE_TARGETS , dan default digunakan. Pada saat dia menulis jawabannya, standarnya adalah i686-pc-mingw32 , sekarang menjadi i686-w64-mingw32.static . Jika Anda menetapkan MXE_TARGETS secara eksplisit ke i686-w64-mingw32 , menghilangkan .static , peringatan dicetak karena sintaks ini sekarang sudah tidak digunakan lagi. Jika Anda mencoba menetapkan target ke i686-pc-mingw32 , itu akan menampilkan kesalahan karena MXE telah menghapus dukungan untuk MinGW.org (yaitu i686-pc-mingw32).

Menjalankan qmake

Saat kami mengubah MXE_TARGETS , <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake perintah tidak akan berfungsi lagi. Sekarang, yang perlu Anda lakukan adalah:

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

Jika Anda tidak menentukan MXE_TARGETS , lakukan ini:

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

Perbarui: Default baru sekarang adalah i686-w64-mingw32.static


Cukup gunakan M lintas lingkungan (MXE). Itu menghilangkan rasa sakit dari keseluruhan proses:

  • Dapatkan:

    $ git clone https://github.com/mxe/mxe.git
    
  • Instal dependensi build

  • Build Qt untuk Windows, dependensinya, dan alat lintas-build; ini akan memakan waktu sekitar satu jam pada mesin cepat dengan akses internet yang layak; unduhannya sekitar 500 MB:

    $ cd mxe && make qt
    
  • Buka direktori aplikasi Anda dan tambahkan alat lintas-bangun ke PATH variabel lingkungan:

    $ export PATH=<mxe root>/usr/bin:$PATH
    
  • Jalankan alat pembuat Qt Makefile lalu buat:

    $ <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake && make
    
  • Anda harus menemukan biner di direktori ./release:

    $ wine release/foo.exe
    

Beberapa catatan :

  • Gunakan cabang master dari repositori MXE; tampaknya mendapatkan lebih banyak cinta dari tim pengembangan.

  • Outputnya adalah biner statis 32-bit, yang akan bekerja dengan baik pada Windows 64-bit.


Oke, saya pikir saya sudah menemukan jawabannya.

Sebagian berdasarkan https://github.com/mxe/mxe/blob/master/src/qt.mk dan https://www.videolan.org/developers/vlc/contrib/src/qt4/rules.mak

Tampaknya "awalnya" saat Anda menjalankan configure (dengan -xtarget, dll.), konfigurasi kemudian menjalankan gcc "hosts" Anda untuk membuat file biner lokal ./bin/qmake

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

lalu Anda menjalankan "make" normal dan membuatnya untuk mingw

  make
  make install

jadi

  1. ya

  2. hanya jika Anda perlu menggunakan sesuatu selain msvcrt.dll (defaultnya). Padahal saya belum pernah menggunakan yang lain jadi saya tidak tahu pasti.

  3. https://stackoverflow.com/a/18792925/32453 mencantumkan beberapa parameter konfigurasi.


Linux
  1. Cara Mengatur Alamat IP Statis dan Konfigurasi Jaringan di Linux

  2. Cara Remote Desktop Dari Windows Ke Desktop Linux Menggunakan XRDP

  3. Bagaimana Mengakses Folder Bersama Windows dari Linux?

  1. Bagaimana cara membuat paket pengujian Travis CI untuk Linux, OS X, Windows?

  2. Cara SCP dari server linux ke klien Windows

  3. Bagaimana cara saya berbagi internet dengan Windows dari kotak Linux saya?

  1. Bagaimana saya membantu ibu saya beralih dari Windows ke Linux

  2. Cara mengkonfigurasi Openbox untuk desktop Linux Anda

  3. Cara Menjalankan Windows 95 Di Linux