
Seperti yang Anda ketahui, aplikasi yang ditulis dalam Qt, yang merupakan
lintas-platform, dijalankan dari
desktop, seluler, Internet , hingga
mikrokontroler .
Salah satu opsi adalah membangun aplikasi Qt di WebAssembly - yang memungkinkan Anda untuk menjalankannya di browser pengguna. Dengan demikian, memperbarui aplikasi untuk pengguna akan terdiri dari mengunggah file wasm baru ke server.
Untuk membuatnya lebih mudah untuk menyebarkan aplikasi, sebagai bagian dari artikel ini, mari kita rakit aplikasi Qt di WebAssembly untuk Windows pada baris perintah.
Versi Qt 5.13.2 digunakan dalam artikel dan saya percaya bahwa pengguna memiliki lingkungan Qt diinstal, dikonfigurasi, dan dia mengumpulkan aplikasi untuk Desktop di Windows.
Jalankan utilitas MaintenanceTool.exe dan pilih "Tambah atau Hapus Komponen" dan centang kotak WebAssembly dan tunggu instalasi selesai.

Buat proyek kosong, misalnya di Qt Creator (Qt Stack-view) dan simpan.
Kami pergi ke
halaman dokumentasi Qt
WASM resmi.
Kami mulai menginstal esmdk. Unduh
emscripten dan bongkar, misalnya, di c: \ wasm
Kami memulai baris perintah (mulai untuk menjalankan cmd) dan mencoba untuk menginstalnya:
cd c:\emsdk emsdk.bat install sdk-fastcomp-1.38.27-64bit
Tidak ada yang terjadi di sini. Dan kursor sudah ada di baris berikutnya. Apa yang bisa terjadi? Mari kita lihat mengapa? Buka file dengan notepad dan lihat:

Apakah kita perlu python? Periksa? Kami menulis di baris perintah
c:\emsdk>python --version "python" , .
Nah, kalau begitu kita masih perlu menginstal Python.
Unduh dan instal. Ingatlah untuk menambahkan tanda centang ketika menginstal "Tambahkan Python 3.8 ke PATH"

Setelah mengunduh dan menginstal, tutup baris perintah dan jalankan CMD lagi. Kami memeriksa:
c:\emsdk>python --version Python 3.8.1
Instal emsdk dan aktifkan lingkungan build:
emsdk.bat install sdk-fastcomp-1.38.27-64bit emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit
Kami memeriksa:
em++
Kompiler sudah siap. Saatnya untuk mulai membangun aplikasi kita. Mari kita lihat folder tempat Qt wasm diinstal: dalam kasus saya, ia berada di C: \ Qt \ 5.13.2 \ wasm_32
Jalankan baris perintah dengan lingkungan untuk membangun Mingw: Mulai mingw - pilih Qt 5.13.2 (MinGW 7.3.0 32-bit)
Kami mengaktifkan emsdk kami di dalamnya:
c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit
Kami masuk ke folder dengan aplikasi tes dan mencoba mengumpulkan:
cd c:\Project\test-wasm qmake "qmake" , .
Apakah ada yang salah? Apakah saya entah bagaimana tidak mengaktifkan string dan lingkungan untuk perakitan dengan benar? Tutup baris perintah dan jalankan lagi: Mulai mingw - pilih Qt 5.13.2 (MinGW 7.3.0 32-bit) dan periksa apakah kita memiliki qmake:
Setting up environment for Qt usage... C:\Qt\5.13.2\mingw73_32>qmake --version QMake version 3.1 Using Qt version 5.13.2 in C:/Qt/5.13.2/mingw73_32/lib
Semuanya baik-baik saja, lingkungan Qt diaktifkan dan qmake berfungsi. Kami mencoba mengaktifkan emsdk lagi dan mendapatkan kesalahan yang sama.
Yah, saya pikir, mungkin untuk membuat teman satu: jalankan emsdk pertama dan kemudian aktifkan lingkungan mingw - untuk ini kita perlu melihat pintasan peluncuran konsol dengan lingkungan mingw32 (mulai mingw - klik kanan lokasi file terbuka - klik kanan pada "Qt 5.13.2 (MinGW 7.3.0 32-bit) ”- properti.

Di objek, kami tertarik pada jalur untuk meluncurkan file bat. Dalam kasus saya ini adalah C: \ Qt \ 5.13.2 \ mingw73_32 \ bin \ qtenv2.bat
Jadi, kita mulai dari awal lagi. Mulai jalankan cmd
c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit C:\Qt\5.13.2\mingw73_32\bin\qtenv2.bat qmake --version
berfungsi ... buka folder dengan kode sumber proyek
qmake make "make" , .
Kami ingat bahwa kami menggunakan mingw dan perintah untuk membangunnya berbeda di dalamnya:
mingw32-make.exe mingw32-make
Aplikasi telah berkumpul, tetapi memeriksa apakah telah digunakan:
g++ -Wl,-s -Wl,-subsystem,windows -mthreads -o release\test-wasm.exe release/main.o release/qrc_qml.o C:\Qt\5.13.2\mingw73_32\lib\libQt5Quick.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Gui.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Qml.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Network.a C:\Qt\5.13.2\mingw73_32\lib\libQt5Core.a -lmingw32 C:\Qt\5.13.2\mingw73_32\lib\libqtmain.a -LC:\openssl\lib -LC:\Utils\my_sql\mysql-5.7.25-win32\lib -LC:\Utils\postgresql\pgsql\lib -lshell32 mingw32-make.exe[1]: Leaving directory 'c:/Project/test-wasm'
Jadi Berhenti Apa yang sudah kami kumpulkan?
Kami membangun aplikasi 32-bit yang biasa untuk
desktop (x86) karena kami menggunakan rakitan
C: \ Qt \ 5.13.2 \ mingw73_32Dan kami perlu membangun WASM. Mari kita sesuaikan lingkungan PATH sehingga dibutuhkan jalur dan qmake dari folder wasm pertama:
set PATH=c:\Qt\5.13.2\wasm_32\bin;%PATH%
Kami menghapus folder dari file yang dikumpulkan
mingw32-make.exe clean del .qmake.stash
Kami memulai perakitan
qmake

Apa itu Lagi-lagi kesalahan? Apa jenis dll yang kita butuhkan? Mari kita cari di folder tempat Qt diinstal:
Bagaimana ini bisa terjadi? Apakah 32-bit WASM yang dikompilasi (c: \ Qt \ 5.13.2 \ wasm_32 \ bin) menggunakan perpustakaan dari MINGW 64-bit?

Nah, misalkan Anda dapat mengambil kesempatan, tambahkan path ke perpustakaan 64 bit ini:
set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% mingw32-make.exe clean qmake mingw32-make.exe
dan ... banyak kesalahan
lebih detail release/main.o:main.cpp:(.text+0x1bc): undefined reference to `_imp___ZN4QUrlD1Ev' release/main.o:main.cpp:(.text+0x1c6): undefined reference to `_imp___ZN11QMetaObject10ConnectionD1Ev' release/main.o:main.cpp:(.text+0x1d7): undefined reference to `_imp___ZN21QQmlApplicationEngine4loadERK4QUrl' release/main.o:main.cpp:(.text+0x1e0): undefined reference to `_imp___ZN15QGuiApplication4execEv' release/main.o:main.cpp:(.text+0x1ef): undefined reference to `_imp___ZN21QQmlApplicationEngineD1Ev' release/main.o:main.cpp:(.text+0x1f8): undefined reference to `_imp___ZN15QGuiApplicationD1Ev' release/main.o:main.cpp:(.text+0x225): undefined reference to `_imp___ZN10QArrayData10deallocateEPS_jj' release/main.o:main.cpp:(.text+0x249): undefined reference to `_imp___ZN21QQmlApplicationEngineD1Ev' release/main.o:main.cpp:(.text+0x252): undefined reference to `_imp___ZN15QGuiApplicationD1Ev' release/main.o:main.cpp:(.text+0x276): undefined reference to `_imp___ZN10QArrayData10deallocateEPS_jj' release/main.o:main.cpp:(.text+0x28f): undefined reference to `_imp___ZN4QUrlD1Ev' release/main.o:main.cpp:(.text+0x2aa): undefined reference to `_imp___ZN4QUrlD1Ev' release/qrc_qml.o:qrc_qml.cpp:(.text+0x23): undefined reference to `qUnregisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)' release/qrc_qml.o:qrc_qml.cpp:(.text+0x53): undefined reference to `qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)' release/qrc_qml.o:qrc_qml.cpp:(.text+0x83): undefined reference to `qUnregisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)' release/qrc_qml.o:qrc_qml.cpp:(.text.startup+0x23): undefined reference to `qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*)'
C:/Qt/Tools/mingw730_32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/lib/../lib/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status mingw32-make[1]: *** [Makefile.Release:66: release/test-wasm.exe] Error 1 mingw32-make[1]: Leaving directory 'c:/Project/test-wasm' mingw32-make: *** [Makefile:38: release] Error 2
Kenapa begitu banyak kesalahan? Kenapa tidak? Saya membersihkan file sementara, mulai membangun, dan mendapat banyak kesalahan.
Jadi, Anda perlu berpikir, tuangkan secangkir teh / kopi ...
Benar! Idenya! Karena ternyata kami menulis path terakhir ke pustaka 64-bit sebagai yang terakhir, kemudian ketika membangun WASM 32-bit, dia tidak mengerti bagaimana dan apa yang harus ditautkan, dan mencoba menggunakan path ke lib 64-bit, yang berarti saya harus menentukan path ke lib 32 bit lebih awal dari sebelumnya 64 bit. Saya akan mencoba memperbaikinya:
Tutup konsol. Kami membuka mingw 32-bit lagi dan di sini pikiran mengunjungi saya: kami sudah meluncurkan baris perintah untuk mingw 32 bit, kemudian mengganti path ke pustaka dengan 64 bit, kami akan kembali mengambil prioritas ketika membangun lingkungan desktop Qt pada komponen 64 bit, dan kami memerlukan sebaliknya (karena PATH akan digunakan hingga 64 bit terlebih dahulu, dan kemudian hingga 32 total perpustakaan). Kalau begitu, algoritma terakhir kami akan seperti ini:
cmd c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% qmake --version QMake version 3.1 Using Qt version 5.13.2 in C:/qt/5.13.2/mingw73_64/lib
tambahkan path ke wasm dan pergi kumpulkan:
set PATH=c:\Qt\5.13.2\wasm_32\bin;%PATH% cd c:\Project\test-wasm c:\Project\test-wasm>qmake --version QMake version 3.1 Using Qt version 5.13.2 in C:/Qt/5.13.2/wasm_32/lib qmake mingw32-make "mingw32-make" , .
25 lagi! Sekarang apa yang salah dengan saya? Di mana file ini? Kemana? Pencarian di Explorer mengatakan bahwa itu ada di
C: \ Qt \ Tools \ mingw730_32 \ binNah, mingw32-make.exe sekarang pasti akan ditemukan bersama kami:
set PATH=C:\Qt\Tools\mingw730_32\bin;%PATH%
Kami mulai mengumpulkan:
c:\Project\test-wasm>mingw32-make c:\Qt\5.13.2\wasm_32\bin\qmake.exe -o Makefile test-wasm.pro Info: creating stash file C:\Project\test-wasm\.qmake.stash sed -es/@APPNAME@/test-wasm/g C:/Qt/5.13.2/wasm_32/plugins/platforms/wasm_shell.html > C:/Project/test-wasm/test-wasm.html "sed" , . mingw32-make: *** [Makefile:424: apphtml] Error 1
sed ?? Ini bukan Linux, Mac, * nix, * BSD. Di mana mendapatkannya? Cari (sed.exe)? .. Dan kami tidak menemukan.
Kami mengambil Internet, mencari (sed download windows) dan menemukan bahwa itu dapat diunduh untuk
Windows :
Unduh binari Zip, buka paket dari folder bin / sed.exe dan jalankan:


Dua kesalahan pada komponen dll yang hilang. Apakah kita masih perlu mengumpulkan dari sumber atau mencari dll yang hilang ini? Tidak, saya tidak ingin melakukan ini ... Sekali lagi, kami hati-hati melihat situs web
GNU dan melihatnya di Unduhan:
• Paket lengkap, kecuali sumber SetupUnduh, buka dan instal. Coba jalankan:
"c:\Program Files (x86)\GnuWin32\bin\sed.exe"
Berhasil !!! Tetap menambahkannya lagi ke jalur:
set PATH="c:\Program Files (x86)\GnuWin32\bin";%PATH% mingw32-make
Prosesor telah boot, perakitan sudah dimulai. Yah, saya harap sekarang kita akan berhasil!
Butuh ... menit
emcc: warning: cannot represent a NaN literal '0x22748a2c570' with custom bit pattern in NaN-canonicalizing JS engines (eg Firefox and Safari) without erasing bits! in ret double 0x7FF4000000000000 in _ZL7qt_snanv() emcc: warning: cannot represent a NaN literal '0x22748a2c570' with custom bit pattern in NaN-canonicalizing JS engines (eg Firefox and Safari) without erasing bits! in ret double 0x7FF4000000000000 in _ZL7qt_snanv.30589() c:\Project\test-wasm>dir ... 25.01.2020 17:42 2 922 test-wasm.html 25.01.2020 17:55 355 725 test-wasm.js 25.01.2020 14:59 461 test-wasm.js_plugin_import.cpp 25.01.2020 16:23 4 384 test-wasm.js_plugin_import.obj 25.01.2020 15:49 601 test-wasm.js_qml_plugin_import.cpp 25.01.2020 16:23 4 668 test-wasm.js_qml_plugin_import.obj 25.01.2020 14:52 1 099 test-wasm.pro 25.01.2020 15:25 22 523 test-wasm.pro.user 25.01.2020 17:55 20 759 738 test-wasm.wasm
Hore! Ternyata. Aplikasi pengujian kami dirakit. Wasm binar membutuhkan waktu 20 MB. Tidak sedikit. Mari kita coba membuka file test-wasm.htm kami di browser dan ...

Untuk meringkas cara membangun aplikasi Qt untuk 5.13.2 di Windows:
1. Anda perlu menginstal Python. GNU SED dan menginstal rakitan biner WebAssembly melalui Qt yang diinstal secara online
2.
c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit set PATH="c:\Program Files (x86)\GnuWin32\bin";%PATH% set PATH=c:\qt\5.13.2\mingw73_64\bin;%PATH% set PATH=C:\Qt\Tools\mingw730_32\bin;%PATH%
Tetapi Habr tidak akan menjadi Habr jika saya belum mencoba
membangun aplikasi
WebAssembly dari versi terbaru Qt, yang saat ini
5.14.0 . Saya harap saya tidak akan mengharapkan pencarian yang sama persis dari akhir seperti ketika membangun di versi 5.13.2.
Melalui penginstal online (MaintenanceTool.exe) kami memasang Qt WebAssembly untuk versi 5.14.0. Kami mengkonfigurasi lingkungan dan menjalankan perakitan.
Proses berlangsung dan ...

Tidak ada yang jelas. Bagaimana itu? Untuk versi 5.13.2, setelah menari dengan rebana, saya dapat membuat aplikasi, tetapi untuk 5.14.0 tidak berhasil? Tetapi bagaimana mereka (Qt) merakitnya?
... Tapi bisakah kita juga membangun WASM Qt 5.14.0 dari sumber? Dan mengapa tidak. Untuk melakukan ini, kami membutuhkan banyak ruang pada hard drive, serta load / load yang baik untuk prosesor:
echo PATH=c:\qtwasm514\bin;"C:\Program Files (x86)\GnuWin32\bin";c:\qt\Tools\mingw730_32\bin;%PATH% c:\emsdk\emsdk.bat activate --embedded sdk-fastcomp-1.38.27-64bit cd c:\Qt\5.14.0\Src configure.bat -no-warnings-are-errors -xplatform wasm-emscripten -platform win32-g++ -nomake examples -prefix c:\qtwasm
Dalam hal ini, setelah perakitan, kita akan menginstal wasm di folder c: \ qtwasm, namun kita tidak perlu mengumpulkan contoh.
Output konfigurasi Building on: win32-g++ (i386, CPU features: none) Building for: wasm-emscripten (wasm, CPU features: none) Target compiler: clang 6.0.1 Configuration: cross_compile largefile release c++11 no-pkg-config reduce_exports static stl Build options: Mode ................................... release Optimize release build for size ........ no Building shared libraries .............. no Using C standard ....................... C11 Using C++ standard ..................... C++11 Using ccache ........................... no Using precompiled headers .............. no Using LTCG ............................. no Target compiler supports: Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... no Qt D-Bus ............................... no Qt D-Bus directly linked to libdbus .... no Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. no Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... no udev ................................... no Using system zlib ...................... no Zstandard support ...................... no Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ no GLib ................................... no iconv .................................. yes ICU .................................... no Built-in copy of the MIME database ..... yes Tracing backend ........................ none Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE2 ..................... no Qt Network: getifaddrs() ........................... no IPv6 ifname ............................ no libproxy ............................... no OpenSSL ................................ no Qt directly linked to OpenSSL ........ no OpenSSL 1.1 ............................ no DTLS ................................... no OCSP-stapling .......................... no SCTP ................................... no Use system proxies ..................... yes Qt Gui: Accessibility .......................... yes FreeType ............................... yes Using system FreeType ................ no HarfBuzz ............................... yes Using system HarfBuzz ................ no Fontconfig ............................. no Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... no PNG .................................. yes Using system libpng ................ no EGL .................................... yes OpenVG ................................. no OpenGL: Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ yes OpenGL ES 3.0 ........................ no OpenGL ES 3.1 ........................ no OpenGL ES 3.2 ........................ no Vulkan ................................. no Session Management ..................... yes Features used by QPA backends: evdev .................................. no libinput ............................... no INTEGRITY HID .......................... no mtdev .................................. no tslib .................................. no xkbcommon .............................. no X11 specific: XLib ................................. no XCB Xlib ............................. no EGL on X11 ........................... no QPA backends: DirectFB ............................... no EGLFS .................................. no LinuxFB ................................ no VNC .................................... yes Mir client ............................. no Qt Sql: SQL item models ........................ yes Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... no Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... no PostgreSQL ............................. no SQLite2 ................................ no SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... no Qt Testlib: Tester for item models ................. yes Qt SerialBus: Socket CAN ............................. no Socket CAN FD .......................... no SerialPort Support ..................... no Further Image Formats: JasPer ................................. no MNG .................................... no TIFF ................................... yes Using system libtiff ................. no WEBP ................................... yes Using system libwebp ................. no Qt QML: QML network support .................... yes QML debugging and profiling support .... yes QML tracing JIT support ................ no QML sequence object .................... yes QML list model ......................... yes QML XML http request ................... yes QML Locale ............................. yes QML delegate model ..................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Qt Quick Designer .......... yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes TableView item ......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes Repeater item .......................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Scxml: ECMAScript data model for QtScxml ...... yes Qt Gamepad: SDL2 ................................... no Qt 3D GeometryLoaders: Autodesk FBX ........................... no Qt Wayland Client ........................ no Qt Wayland Compositor .................... no Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no WinRT Bluetooth API (desktop & UWP) .... no WinRT advanced bluetooth low energy API (desktop & UWP) . no Qt Sensors: sensorfw ............................... no Qt Quick Controls 2: Styles ................................. Default Fusion Imagine Material Universal Qt Quick Templates 2: Hover support .......................... yes Multi-touch support .................... yes Qt Positioning: Gypsy GPS Daemon ....................... no WinRT Geolocation API .................. no Qt Location: Qt.labs.location experimental QML plugin . yes Geoservice plugins: OpenStreetMap ........................ no HERE ................................. yes Esri ................................. yes Mapbox ............................... yes MapboxGL ............................. no Itemsoverlay ......................... yes QtXmlPatterns: XML schema support ..................... yes Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux ........................ no OpenAL ................................. no PulseAudio ............................. no Resource Policy (libresourceqt5) ....... no Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Qt Tools: QDoc ................................... no Qt WebEngineCore: Qt WebEngine Widgets ................... yes Qt WebEngine Qml ....................... yes Embedded build ......................... yes Full debug information ................. no Pepper Plugins ......................... no Printing and PDF ....................... no Proprietary Codecs ..................... no Spellchecker ........................... yes Native Spellchecker .................... no WebRTC ................................. no Use System Ninja ....................... no Geolocation ............................ yes WebChannel support ..................... yes Use v8 snapshot ........................ yes Kerberos Authentication ................ no Extensions ............................. no Support qpa-xcb ........................ no Building v8 snapshot supported ......... yes Use ALSA ............................... no Use PulseAudio ......................... no Optional system libraries used: re2 .................................. no icu .................................. no libwebp, libwebpmux and libwebpdemux . no opus ................................. no ffmpeg ............................... no libvpx ............................... no snappy ............................... no glib ................................. no zlib ................................. no minizip .............................. no libevent ............................. no jsoncpp .............................. no protobuf ............................. no libxml2 and libxslt .................. no lcms2 ................................ no png .................................. no JPEG ................................. no harfbuzz ............................. no freetype ............................. no Required system libraries: fontconfig ........................... no dbus ................................. no nss .................................. no khr .................................. no glibc ................................ no Required system libraries for qpa-xcb: x11 .................................. no libdrm ............................... no xcomposite ........................... no xcursor .............................. no xi ................................... no xtst ................................. no Qt WebEngineQml: UI Delegates ........................... yes Test Support ........................... no Note: Using static linking will disable the use of dynamically loaded plugins. Make sure to import all needed static plugins, or compile needed modules into the library. Note: No wayland-egl support detected. Cross-toolkit compatibility disabled. Note: The following modules are not being compiled in this configuration: serialport 3dcore 3drender WARNING: QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation. Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. On Windows, you must set LLVM_INSTALL_DIR to the installation path. WARNING: host pkg-config not found Qt is now configured for building. Just run 'mingw32-make'. Once everything is built, you must run 'mingw32-make install'. Qt will be installed into 'c:\qtwasm'. Prior to reconfiguration, make sure you remove any leftovers from the previous build.
Kami merakit dan menginstal:
mingw32-make mingw32-make install
Setelah saya membangun kembali WASM Qt 5.14.0 dan menginstal c: \ qtwasm di folder dan menggunakan jalur ini, saya dapat membangun WebAssembly dari versi 5.14.0 dari Qt.
Kesimpulan 2.
Jika Anda ingin menggunakan Qt 5.14.0 WebAssembly, Anda harus membangunnya kembali dari sumber dan menggunakan versi yang sudah Anda buat.
Kesimpulan
Qt WebAssembly adalah teknologi yang cukup menarik yang telah muncul di Qt sejak versi
5.12 .
Contoh WebAssembly dapat dilihat
online di situs web Qt.
Namun, ketika mencoba membangun proyek saya sendiri, saya mendapat kesalahan:

Karena itu, ketika menggunakan teknologi ini, perlu untuk mempelajari
keterbatasannya .
Modul yang saat ini tidak didukung: qtmultimedia, qtwebview.
Saat ini WebAssembly bekerja sebagian besar di browser Desktop, dan ketika dukungan penuh muncul pada perangkat seluler tidak diketahui.
Bagi mereka yang telah membaca artikel ini sampai akhir, tetapi belum pernah mencoba Qt, Anda dapat mengunduh
installer online , pilih opsi MinGW dan versi yang diperlukan dari Qt WebAssmbly.
QtCreator akan diinstal secara default dan Anda dapat membangun aplikasi pertama Anda.
Pada akhir artikel ini, saya ingin merekomendasikan agar pengguna mencoba mengumpulkan contoh dari sumber Qt, dari folder Src \ qtcharts \ example dan menjalankannya di browser.
Untuk memulai server web, Anda dapat menggunakan Python dan menjalankan:
python -m http.server 8000 --bind 192.168.0.10
jika Anda memiliki alamat di jaringan lokal komputer 192.168.0.10. Juga, jangan lupa untuk membuka port di Firewall, dan kemudian Anda dapat mencoba untuk membuka aplikasi melalui browser dari komputer / perangkat / smartphone lain.
Pilih dan berikan contoh Anda menggunakan kerangka GUI terbaik untuk C ++ Qt di komentar.
Semoga sukses dengan kreativitas dan prestasi baru Anda!