Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt web程序集:配置工具包_C++_Qt_Build_Emscripten_Webassembly - Fatal编程技术网

C++ Qt web程序集:配置工具包

C++ Qt web程序集:配置工具包,c++,qt,build,emscripten,webassembly,C++,Qt,Build,Emscripten,Webassembly,我想为我的科学项目测试QT WebAssembly。 因此,我安装了emscripten $em++ --version 返回 emcc (Emscripten gcc/clang-like replacement) 1.38.30 (commit a5082b232617c762cb65832429f896c838df2483)... 然后,我使用QtWebInstaller安装了Qt。 在我的安装目录中,我有一个wasm_32文件夹,其中包含bin和qmake: $ ~/Qt_web/5

我想为我的科学项目测试QT WebAssembly。 因此,我安装了emscripten

$em++ --version
返回

emcc (Emscripten gcc/clang-like replacement) 1.38.30 (commit a5082b232617c762cb65832429f896c838df2483)...
然后,我使用QtWebInstaller安装了Qt。 在我的安装目录中,我有一个
wasm_32
文件夹,其中包含
bin
qmake

$ ~/Qt_web/5.13.2/wasm_32/bin/qmake --version 
返回

QMake version 3.1
Using Qt version 5.13.2 in /home/myName/Qt_web/5.13.2/wasm_32/lib
但是,当我启动Qt creator时,单击
Projects
我会看到一个名为:
Qt 5.13.2 WebAssembly
的工具包,但我无法选择它(它是灰色的)。 当我点击管理工具包时,我看到Qt 5.132.WebasBalm没有C和C++编译器。

当我切换到
Qt版本时,也会收到一条警告。警告说:

ABI detection failed: Make sure to use a matching compiler when building. No qmlscene installed. 
这是所有可选编译器的列表:

问题:

我真的不明白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
编辑:

当我打开qt维护工具并查看已安装的软件包时,我得到以下信息:

EDIT2: 在更改为Qt Creator
4.11.0-beta2(4.10.83)
之后,我能够按照部分描述进行操作。我可以选择插件,但我仍然无法更改设备类型。

也许这与我现在得到的错误有关:

EDIT3:

似乎我的emscripten编译器有一些问题。 编译器是否位于:

emscripten/emsdk/clang/e1.38.30_64bit/clang++
emscripten/emsdk/clang/e1.38.30_64bit/clang
<>我注意到,如果在qtC造饰者> >工具包>编译器中使用<代码>添加/代码>,我选择<代码>添加> > WebBaseMule> C <代码>,它在<代码>手册> > C++ > > Emscripten Compiler < /代码>中生成新条目,而不在<代码>手册> > > > EXPROTEN编译器< />代码>中。这是个问题吗

编辑

以下是“我的编译器”页面的外观:

您是否尝试在“工具包”选项卡中使用此值设置编译器

编译器: C编译器x86 64 e1.38.27_位 C++编译器x86 64 E1.3827位B/P Qt版本: qmake使用webassembly构建的路径,例如webassembly二进制文件或自定义二进制文件

Qt mkspec: 艾姆斯皮滕酒店

希望这些信息有帮助,如果你遇到任何其他问题,请告诉我

  • 您需要将.emscripten文件从emsdk目录复制到您的主页(/home/myUsername)

  • 您需要手动修复文件中的路径(请参见下面的示例)

  • 请注意,至少在我使用的版本(1.39.8)中,.emscripten文件是一个python脚本(可能是一个bug?)

    编辑前的示例文件:

    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]
    
    编辑后:

    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]
    

    完成上述步骤后,qt creator能够检测到Emscripten编译器,没有错误。

    是的,Emscripten是一个工具链(包括编译器),需要在QtCreator中将其设置为编译器,以便创建可用的WA工具包。看看你是否还没有。谢谢,这看起来很有希望。但是,我无法选择
    Help>About Plugins>Device Support>WebAssembly
    最近才注意到Qt兴趣列表上的这个线程。。。显然,最新的QtCreator预览版是推荐的,但不清楚这是否只适用于Mac。好的,使用最新的Qt Creator预览有点帮助。我现在可以选择插件,但我仍然无法更改工具包中的设备类型。我将在问题中添加一个屏幕截图。您是否在WA套件配置中选择了新添加的编译器?我认为你应该关闭另一个问题,并将信息集中在这里(但仅限于IMHO)。在找到这个答案之前,我已经找到了这个答案。如果您检测一下编译器,就会看到一些愚蠢的路径,上面写着emsdk_path+…--这是一个很大的暗示。