use*_*005 5 c++ qt build emscripten webassembly
我想为我的科学程序测试 QT WebAssembly。因此,我安装了 emscripten。
$em++ --version
Run Code Online (Sandbox Code Playgroud)
返回
emcc (Emscripten gcc/clang-like replacement) 1.38.30 (commit a5082b232617c762cb65832429f896c838df2483)...
Run Code Online (Sandbox Code Playgroud)
然后我使用 Qt WebInstaller 安装了 Qt。在我的安装目录中,我有一个wasm_32文件夹,其中包含bin和qmake:
$ ~/Qt_web/5.13.2/wasm_32/bin/qmake --version
Run Code Online (Sandbox Code Playgroud)
返回
QMake version 3.1
Using Qt version 5.13.2 in /home/myName/Qt_web/5.13.2/wasm_32/lib
Run Code Online (Sandbox Code Playgroud)
但是,当我启动 Qt creator 时,单击ProjectsI see a Kit called: Qt 5.13.2 WebAssemblybut I can't select it(它是灰色的)。当我单击管理套件时,我看到没有为 Qt 5.13.2.WebAssembly 选择 C 和 C++ 编译器。

当我更改为Qt Versions. 警告说:
ABI detection failed: Make sure to use a matching compiler when building. No qmlscene installed.
Run Code Online (Sandbox Code Playgroud)
题:
我真的不明白这emscripten有什么关系。emscripten 是编译器吗?如果是,它是否应该由Qt 5.13.2 WebAssembly套件自动选择?一个合适的Qt WebAssembly套件是什么样子的?
如果我选择 gcc 作为我的编译器,我会收到一条错误消息:
/home/myName/Qt_web/5.13.2/wasm_32/plugins/platforms/libqwasm.a:-1: error: error adding symbols: File format not recognized
Run Code Online (Sandbox Code Playgroud)
编辑:
当我打开 qt 维护工具并查看已安装的软件包时,我得到以下信息:

EDIT2:
更改为 Qt Creator 后,4.11.0-beta2 (4.10.83)我能够遵循此描述的部分内容。我能够选择插件,但我仍然无法更改设备类型。

编辑3:
好像我的 emscripten 编译器有一些问题。编译器是否位于:
emscripten/emsdk/clang/e1.38.30_64bit/clang++
emscripten/emsdk/clang/e1.38.30_64bit/clang
Run Code Online (Sandbox Code Playgroud)
我注意到的一件事是,如果我add在 QtCreator >> Kits >> Compilers 中使用并选择Add >> WebAssembly >> C它会Manual >> C++ >> Emscripten Compiler在Manual >> C >> Emscripten Compiler. 这是一个问题吗?
编辑
小智 5
您需要将 .emscripten 文件从 emsdk 目录复制到您的主目录 (/home/myUsername)。
您需要手动修复文件中的路径(请参见下面的示例)。
请注意, .emscripten 文件,至少在我使用的版本(1.39.8)中,是一个 python 脚本(也许是一个错误?)
编辑前的示例文件:
import os
emsdk_path = os.path.dirname(os.environ.get('EM_CONFIG')).replace('\\', '/')
NODE_JS = emsdk_path + '/node/12.18.1_64bit/bin/node'
LLVM_ROOT = emsdk_path + '/upstream/bin'
BINARYEN_ROOT = emsdk_path + '/upstream'
EMSCRIPTEN_ROOT = emsdk_path + '/upstream/emscripten'
TEMP_DIR = emsdk_path + '/tmp'
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]
Run Code Online (Sandbox Code Playgroud)
编辑后:
import os
emsdk_path = os.path.dirname(os.environ.get('EM_CONFIG')).replace('\\', '/')
NODE_JS = '/home/myUsername/node/12.18.1_64bit/bin/node'
LLVM_ROOT = '/home/myUsername/upstream/bin'
BINARYEN_ROOT = '/home/myUsername/upstream'
EMSCRIPTEN_ROOT = '/home/myUsername/upstream/emscripten'
TEMP_DIR = '/home/myUsername/tmp'
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]
Run Code Online (Sandbox Code Playgroud)
完成上述步骤后,qt 创建者能够检测到 Emscripten 编译器,没有错误。
小智 0
您是否尝试在套件选项卡中使用此值设置编译器?
编译器: C 编译器 x86 64 e1.38.27_bit C++ 编译器 x86 64 e1.38.27_bit
Qt 版本:使用 WebAssembly 构建的 qmake 的路径,例如 WebAssembly 二进制文件或您的自定义二进制文件。
Qt mkspec:wasm-emscripten
希望这些信息有帮助,如果您遇到任何其他问题,请告诉我。