【问题标题】:Emscripten emcmake on win10, error when Including X11 supportWin10 上的 Emscripten emcmake,包括 X11 支持时出错
【发布时间】:2022-12-30 02:43:13
【问题描述】:

我正在 Windows 10 上开发一个相对简单的 C++ 项目。

编译为 Windows 可执行文件时一切正常。但是我在尝试编译为 Webassembly 时遇到了问题。

来自 Emscripten 文档there,至少对于 Windows,程序似乎是:

emcmake cmake .
# then
emmake make

但是当我执行时:

emcmake cmake . 

我收到此错误:

configure: cmake . 
-DCMAKE_TOOLCHAIN_FILE=C:\gui2one\CODE\emsdk\upstream\emscripten\cmake\Modules\Platform\Emscripten.cmake 
-DCMAKE_CROSSCOMPILING_EMULATOR=C:/gui2one/CODE/emsdk/node/14.18.2_64bit/bin/node.exe;
--experimental-wasm-bulk-memory;--experimental-wasm-threads -G "MinGW Makefiles"
-- Including X11 support
CMake Error at C:/cmake-3.19.5-win64-x64/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:218 (message):
  Could NOT find X11 (missing: X11_X11_LIB)
Call Stack (most recent call first):
C:/cmake-3.19.5-win64-x64/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:582 (_FPHSA_FAILURE_MESSAGE)
C:/cmake-3.19.5-win64-x64/share/cmake-3.19/Modules/FindX11.cmake:437 (find_package_handle_standard_args)
vendor/glfw/src/CMakeLists.txt:190 (find_package)

我尝试使用 cygwin 安装 libX11,但 Cmake 仍然无法找到它。

我必须说我迷失在交叉编译的土地上......

我怎样才能使 X11 可用于 Cmake ?

这是此项目的 CmakeLists.txt:

cmake_minimum_required(VERSION 3.2)


set (CMAKE_CXX_STANDARD 17)

project(Orbitals)

add_definitions(-DOGL_DEBUG)


include_directories(
    cpp/
    vendor/glad/include
    cpp/Render
    cpp/Objects
    vendor/spdlog/include
    vendor/glad/include
    vendor/glad/include/glad
    C:/gui2one/CODE/emsdk/upstream/emscripten/system/include
    # ${EMSCRIPTEN_PATH}/upstream/emscripten/system/include/GLES3
)

set(RENDER_SRC 
    cpp/Render/Camera.cpp
    cpp/Render/OpenGLBuffer.cpp
    cpp/Render/OpenGLFrameBuffer.cpp
    cpp/Render/OpenGLHDRSkybox.cpp
    cpp/Render/OpenGLHDRTexture.cpp
    cpp/Render/OpenGLShader.cpp
    cpp/Render/OpenGLSkybox.cpp
    cpp/Render/OpenGLTexture.cpp
    cpp/Render/OpenGLVertexArray.cpp
)

add_executable(${PROJECT_NAME}
    cpp/main.cpp
    cpp/stb_image.cpp
    cpp/Timer.cpp
    cpp/pch.h
    cpp/opengl_debug.h
    cpp/Log.h
    cpp/Log.cpp
    cpp/RNDGenerator.cpp
    cpp/Algorithms/PoissonDiscSampling.cpp
    cpp/Mesh/Mesh.cpp
    cpp/Mesh/MeshUtils.cpp
    cpp/Mesh/MeshImporter.cpp
    cpp/Mesh/PointCloud.cpp
    cpp/Objects/Entity3d.cpp
    cpp/Objects/LightObject.cpp
    cpp/Objects/MeshObject.cpp
    ${RENDER_SRC}

)

set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
target_include_directories(${PROJECT_NAME} PUBLIC
    vendor/glfw/include
    vendor/glad/include
    vendor/glm
    vendor/spdlog/include
    vendor/
    cpp/Render
    C:/gui2one/CODE/emsdk/upstream/emscripten/system/include
)


# GLFW
add_subdirectory(vendor/glfw)
include_directories(vendor/glfw/include)
target_link_libraries(${PROJECT_NAME} glfw ${GLFW_LIBRARIES})


# GLAD
add_subdirectory(vendor/glad)
include_directories(vendor/glad/include)
target_link_libraries(${PROJECT_NAME} glad ${GLAD_LIBRARIES})


# ASSIMP
add_subdirectory(vendor/assimp)

include_directories(vendor/assimp/include)
target_link_libraries(${PROJECT_NAME} assimp ${ASSIMP_LIBRARIES})

【问题讨论】:

    标签: c++ cmake emscripten emcmake


    【解决方案1】:

    使用 emscripten 编译时不需要包含 glfw 目录。 GLFW3 已经包含在 emscripten 库中,所以你不需要编译它。在构建 HTML5 时,您可以简单地省略 add_subdirectory,如下所示:

    # GLFW
    if (NOT EMSCRIPTEN)
        add_subdirectory(vendor/glfw)
    endif()
    include_directories(vendor/glfw/include)
    target_link_libraries(${PROJECT_NAME} glfw ${GLFW_LIBRARIES})
    

    还要确保为要编译的目标添加 USE_GLFW=3 链接标志:

    set_target_properties(target
            PROPERTIES SUFFIX ".html"
            LINK_FLAGS " --bind -s WASM=0 -s MIN_WEBGL_VERSION=1 -s ABORT_ON_WASM_EXCEPTIONS=1 -g2 -s USE_GLFW=3")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2011-12-05
      相关资源
      最近更新 更多