<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Building Qt6 WebAssembly GUI with Emscripten fails because of missing GLESv2&#x2F;EGL]]></title><description><![CDATA[<p dir="auto">Since weeks I try to build my complete project. Every time i want to use a new library the troubles start from scratch. No I want to use cpr for my http client. I am currently trying to build a Qt6 GUI project for WebAssembly using Emscripten.<br />
My setup:</p>
<ul>
<li>
<p dir="auto">Qt 6.8.3 (wasm_singlethread)</p>
</li>
<li>
<p dir="auto">Emscripten SDK (latest, emcc/em++)</p>
</li>
<li>
<p dir="auto">CMake 3.31 (via CLion 2025.1.3)</p>
</li>
<li>
<p dir="auto">Using Qt’s qt.toolchain.cmake and chaining Conan’s toolchain for dependencies (spdlog, cpr, nlohmann_json, …)</p>
</li>
</ul>
<p dir="auto">This is my CMakeLists.txt</p>
<pre><code>cmake_minimum_required(VERSION 3.21)
project(qt3d_wasm_project VERSION 0.1 LANGUAGES CXX)
message(STATUS "CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
    if(NOT TARGET emscripten_flags)
        add_library(emscripten_flags INTERFACE)
        target_link_options(emscripten_flags INTERFACE
                "SHELL:-sUSE_ZLIB=1"
                # "SHELL:-sFETCH=1" #maybe i will need this later for crp /libcurl
        )
    endif()

    if(NOT TARGET GLESv2::GLESv2)
        add_library(GLESv2::GLESv2 INTERFACE IMPORTED GLOBAL)
        target_link_options(GLESv2::GLESv2 INTERFACE "SHELL:-sUSE_WEBGL2=1")
    endif()
    if(NOT TARGET EGL::EGL)
        add_library(EGL::EGL INTERFACE IMPORTED GLOBAL)
        target_link_options(EGL::EGL INTERFACE "SHELL:-sUSE_WEBGL2=1")
    endif()
endif()

add_subdirectory(libraries/material_data_lib)

if(ENABLE_GUI)
    find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Quick3D Qml Quick3DHelpers Network)

    qt_add_executable(appqt3d
            resources.qrc
            main.cpp
            libraries/material_data_lib/include/IMaterialDataFetcher.h
            libraries/material_data_lib/src/MaterialDataFactory.cpp
    )

    if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
        target_link_libraries(appqt3d PRIVATE emscripten_flags  GLESv2::GLESv2 EGL::EGL)
    endif()

    target_link_libraries(appqt3d PRIVATE
            Qt6::Core Qt6::Gui Qt6::Quick Qt6::Quick3D Qt6::Quick3DHelpers Qt6::Network
    )
endif()

</code></pre>
<p dir="auto">My CMake Options that i use:</p>
<pre><code>-DCMAKE_TOOLCHAIN_FILE=/home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6/qt.toolchain.cmake
-DQT_CHAINLOAD_TOOLCHAIN_FILE=/home/emmynoether/Dokumente/Webseite/MaterialStack/build_wasm/build/Release/generators/conan_toolchain.cmake
-DENABLE_GUI=ON
-DBUILD_TESTING=OFF
-DQt6_DIR=/home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6
-DQT_HOST_PATH=/home/emmynoether/Qt/6.8.3/gcc_64
-DQT_DEBUG_FIND_PACKAGE=ON
</code></pre>
<p dir="auto">The Output of CMake:</p>
<pre><code>-- Could NOT find EGL (missing: HAVE_EGL) (found version "1.5")
-- Could NOT find GLESv2 (missing: GLESv2_INCLUDE_DIR GLESv2_LIBRARY HAVE_GLESv2 HAVE_GLESv2) 
CMake Warning at /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6/Qt6Config.cmake:196 (find_package):
  Found package configuration file:

    /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake

  but it set Qt6Gui_FOUND to FALSE so package "Qt6Gui" is considered to be
  NOT FOUND.  Reason given by package:

  Qt6Gui could not be found because dependency GLESv2 could not be found.

  Configuring with --debug-find-pkg=GLESv2 might reveal details why the
  package was not found.

   find_package search path values and other context for the last package that was not found:
    CMAKE_MODULE_PATH: /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6/platforms;/home/emmynoether/Dokumente/Webseite/MaterialStack/build_wasm/build/Release/generators;/home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6;/home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6/3rdparty/kwin
    CMAKE_PREFIX_PATH: /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake;/home/emmynoether/Dokumente/Webseite/MaterialStack/build_wasm/build/Release/generators
    $ENV{CMAKE_PREFIX_PATH}: 
    CMAKE_FIND_ROOT_PATH: /home/emmynoether/Qt/6.8.3/wasm_singlethread
    _qt_additional_packages_prefix_paths: 
    _qt_additional_host_packages_prefix_paths: 
    _qt_cmake_dir: /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake
    QT_HOST_PATH: /home/emmynoether/Qt/6.8.3/gcc_64
    Qt6HostInfo_DIR: /home/emmynoether/Qt/6.8.3/gcc_64/lib/cmake/Qt6HostInfo
    Qt6_DIR: /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6
    CMAKE_TOOLCHAIN_FILE: /home/emmynoether/Qt/6.8.3/wasm_singlethread/lib/cmake/Qt6/qt.toolchain.cmake
    CMAKE_FIND_ROOT_PATH_MODE_PACKAGE: BOTH
    CMAKE_SYSROOT: 
    $ENV{PATH}: /home/emmynoether/emsdk/upstream/emscripten:/home/emmynoether/emsdk/node/22.16.0_64bit/bin:/home/emmynoether/.local/bin:/home/emmynoether/.local/bin:/home/emmynoether/.local/bin:/home/emmynoether/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/emmynoether/.dotnet/tools:/home/emmynoether/Downloads/clion-2025.1.3/bin/ninja/linux/x64

Call Stack (most recent call first):
  CMakeLists.txt:26 (find_package)

</code></pre>
<p dir="auto">Even though Qt6GuiConfig.cmake exists in <code>wasm_singlethread/lib/cmake/Qt6Gui/ </code>, it refuses to mark  <code>Qt6Gui_FOUND </code> as TRUE because  <code>FindWrapGLESv2.cmake </code> did not succeed.</p>
<p dir="auto">Why does Qt6GuiConfig.cmake for WebAssembly still insist on “real” GLESv2/EGL libraries, even though WebAssembly uses WebGL via Emscripten?<br />
Is there a recommended way to make Qt6Gui’s dependency resolution happy in a WASM build without hacking its CMake files?<br />
thank you</p>
]]></description><link>https://forum.qt.io/topic/163417/building-qt6-webassembly-gui-with-emscripten-fails-because-of-missing-glesv2-egl</link><generator>RSS for Node</generator><lastBuildDate>Thu, 05 Nov 2026 01:18:39 GMT</lastBuildDate><atom:link href="https://forum.qt.io/topic/163417.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Oct 2025 14:08:48 GMT</pubDate><ttl>60</ttl></channel></rss>