Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QT-Webassembly - Compile Examples



  • Hi everybody,

    i would like to compile some of the qt examples with emcc compiler, but i have some trouble with it.
    I already searched for this error some hours but didn't get a good solution.

    So here is what i have done:

    1. Downloaded qt web installer (linux) from qt.io
    2. Installed qt 5.13 (complete) => with sources and Webassembly
    3. => Since 5.13 i think there is no need to compile Webassembly on his own like on 5.12 anymore.
    4. Than i installed emcc like the instruction on emscription.org said.

    git clone https://github.com/emscripten-core/emsdk.git
    cd emsdk
    git pull
    ./emsdk install latest
    ./emsdk activate latest
    source ./emsdk_env.sh
    sudo apt-get install python2.7
    sudo apt-get install cmake
    sudo apt-get install default-jre
    

    After i have done that i verified the emcc installation. Everything is fine.

    5. Started QtCreator => There is already an QtWebassembly Kit but without an Compiler
    6. Added emcc and em++ compiler to QtCreator (custom-compiler)

    Name: emcc
    Compiler-Path:  ~/work/privat/project/emc/emsdk/fastcomp/emscripten/emcc
    Path to Make: /usr/bin/make
    ABI: x86,linux,generic, elf,64bit
    QT-mkspecs: empty
    
    Name: em++
    Compiler-Path:  ~/work/privat/project/emc/emsdk/fastcomp/emscripten/em++
    Path to Make: /usr/bin/make
    ABI: x86,linux,generic, elf,64bit
    QT-mkspecs: empty
    
    Everything else on Default.
    

    7. Added Compiler to QtWebassembly-Kit
    8. Opened any example from Qt and also made a simple Window with an anchors.fill red Rectangle
    9. Compiling staring like always BUTTTTT than there where some issues.

    warning: unexpected return type i32 in call to 'lseek', should be i64
    warning: unexpected argument type i32 at index 5 in call to '__mmap', should be i64
    warning: unexpected argument type i32 at index 5 in call to '__mmap', should be i64
    warning: unexpected argument type i32 at index 5 in call to '__mmap', should be i64
    warning: unexpected argument type i32 at index 5 in call to '__mmap', should be i64
    warning: unexpected argument type i32 at index 5 in call to '__mmap', should be i64
    warning: unexpected argument type i32 at index 1 in call to 'lseek', should be i64
    warning: unexpected return type i32 in call to 'lseek', should be i64
    warning: unexpected argument type i32 at index 5 in call to '__mmap', should be i64
    emcc: warning: cannot represent a NaN literal '0x1b1af280' with custom bit pattern in NaN-canonicalizing JS engines (e.g. Firefox and Safari) without erasing bits!
      in   ret double 0x7FF4000000000000 in _ZL7qt_snanv() 
    emcc: warning: cannot represent a NaN literal '0x1b1af280' with custom bit pattern in NaN-canonicalizing JS engines (e.g. Firefox and Safari) without erasing bits!
      in   ret double 0x7FF4000000000000 in _ZL7qt_snanv.24722() 
    warning: unexpected return type i32 in call to '__ftello', should be i64
    warning: unexpected argument type i32 at index 1 in call to 'lseek', should be i64
    warning: unexpected return type i32 in call to 'lseek', should be i64
    

    After a while QtCreator starts printing a lot lot lot lot output in assmbly (takes lot of time)

    alt text

    Ending up with this error:

    fatal: error in validating output shared:error:
    --total-memory=16777216 --trap-mode=clamp -Os --mem-init=./untitled.js.mem --mem-base=1024 --wasm-only -g -o ./untitled.wast -S --mvp-features' failed (1)
    

    As i said i already searched for it at google and tried some option i found:

    QMAKE_CXXFLAGS += -s WASM=0
    QMAKE_CXXFLAGS += -s TOTAL_MEMORY=52428800
    

    Still the same :( Does anyone knows where i made a mistake ? What am i doing wrong?



  • @david_001 What version of emscripten do you have?
    Qt 5.13 webassembly requires 1.38.27
    https://wiki.qt.io/Qt_for_WebAssembly



  • Lastest => 1.38.39 shouldn't it work with a newer version as well?



  • @david_001
    emscripten can and do make radical and non compatible changes. So we decided that we would tie a certain Qt version to a certain emscripten version.
    We have not made any changes to enforce this, or at least to point out to the developer that a certain version is required.



  • I used the Version you recommended, with the Version 1.38.27 the compilation will successfully.

    Here a Tutorial to setup:

    1. Downloaded qt web installer (linux) from qt.io
    2. Installed qt 5.13 (complete) => with sources and Webassembly
    3. => Since 5.13 i think there is no need to compile Webassembly on his own like on 5.12 anymore.
    4. Than i installed emcc like the instruction on emscription.org said.

    git clone https://github.com/emscripten-core/emsdk.git
    cd emsdk
    git pull
    ./emsdk install sdk-1.38.27-64bit
    ./emsdk activate sdk-1.38.27-64bit
    source ./emsdk_env.sh
    sudo apt-get install python2.7
    sudo apt-get install cmake
    sudo apt-get install default-jre
    

    After i have done that i verified the emcc installation. Everything is fine.

    5. Started QtCreator => There is already an QtWebassembly Kit but without an Compiler
    6. Added emcc and em++ compiler to QtCreator (custom-compiler)

    Name: emcc
    Compiler-Path:  ~/work/privat/project/emsdk/emscripten/1.38.27/emcc
    Path to Make: /usr/bin/make
    ABI: x86,linux,generic, elf,64bit
    QT-mkspecs: empty
    
    Name: em++
    Compiler-Path:  ~/work/privat/project/emsdk/emscripten/1.38.27/em++
    Path to Make: /usr/bin/make
    ABI: x86,linux,generic, elf,64bit
    QT-mkspecs: empty
    
    Everything else on Default.
    

    7. Added Compiler to QtWebassembly-Kit
    8. DONE


  • Banned

    This post is deleted!

Log in to reply