使用Emscripten构建Speed Dreams的依赖配置问题
移植Speed Dreams到Web的Emscripten构建问题及解决进展
初始构建问题
使用emcmake cmake(Emscripten的CMake工具链)构建开源赛车游戏Speed Dreams时,流程可自动检测到OpenAL、OpenGL等Emscripten自带依赖,但无法识别Zlib、PNG、OGG等非自带依赖,导致构建终止。示例报错如下:
-- Looking for library OpenAL - found -- Could NOT find OGG (missing: OGG_LIBRARY OGG_INCLUDE_DIR)
自行下载jpeg-9e并用Emscripten构建后,得到包含.o、.wasm、.PLO、.PO及.a文件的.deps和.libs文件夹,但不清楚如何将这些依赖接入构建流程,也不确定是否需要修改Speed Dreams的CMake文件。
依赖获取更新
使用embuilder build [portName]命令成功获取jpeg、ZLib、PNG、OGG等依赖,但SDL2、Vorbis等有可用端口的依赖仍无法正常识别,构建输出片段如下:
-- Looking for libraries X11 - NOT found -- Looking for dlopen in dl -- Looking for dlopen in dl - found -- Looking for library OpenAL - found -- Found OGG: C:/Users/prisc/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libogg.a -- Looking for library Ogg - found -- Found VORBIS: C:/Users/prisc/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libvorbis.a -- Looking for library Vorbis - found -- Could NOT find VORBISFILE (missing: VORBISFILE_LIBRARY) -- Looking for library VorbisFile - NOT found -- Looking for library ENet - NOT found -- Looking for library OpenGL - found -- Looking for library OpenGL/GLU - found -- Found ZLIB: C:/Users/prisc/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libz.a (found version "1.2.13") -- Looking for library Zlib - found -- Found PNG: C:/Users/prisc/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libpng.a (found version "1.6.39") -- Looking for library PNG - found -- Found JPEG: C:/Users/prisc/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libjpeg.a (found version "90") -- Looking for library JPEG - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE -- Could NOT find SDL2 (missing: SDL2_INCLUDE_DIR) -- Could NOT find SDL2 (missing: SDL2_INCLUDE_DIR) -- Could NOT find SDL2 (missing: SDL2_INCLUDE_DIR) -- Looking for library SDL2 - NOT found -- Could NOT find SDL2 (SDL2 is required by SDL2_mixer). -- Looking for library SDL2_mixer - NOT found -- Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) -- Looking for library CURL - NOT found -- Could NOT find osgDB (missing: OSGDB_LIBRARY OSGDB_INCLUDE_DIR) -- Could NOT find osgViewer (missing: OSGVIEWER_LIBRARY OSGVIEWER_INCLUDE_DIR) -- Could NOT find osgGA (missing: OSGGA_LIBRARY OSGGA_INCLUDE_DIR) -- Could NOT find osgUtil (missing: OSGUTIL_LIBRARY OSGUTIL_INCLUDE_DIR) -- Could NOT find osgFX (missing: OSGFX_LIBRARY OSGFX_INCLUDE_DIR) -- Could NOT find osgParticle (missing: OSGPARTICLE_LIBRARY OSGPARTICLE_INCLUDE_DIR) -- Could NOT find osgShadow (missing: OSGSHADOW_LIBRARY OSGSHADOW_INCLUDE_DIR) -- Could NOT find osgText (missing: OSGTEXT_LIBRARY OSGTEXT_INCLUDE_DIR) -- Could NOT find osg (missing: OSG_LIBRARY OSG_INCLUDE_DIR) -- Could NOT find OpenThreads (missing: OPENTHREADS_LIBRARY OPENTHREADS_INCLUDE_DIR) CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find OpenSceneGraph (missing: OPENSCENEGRAPH_LIBRARIES OPENSCENEGRAPH_INCLUDE_DIR OSGDB_FOUND OSGVIEWER_FOUND OSGGA_FOUND OSGUTIL_FOUND OSGFX_FOUND OSGPARTICLE_FOUND OSGSHADOW_FOUND OSGTEXT_FOUND OSG_FOUND OPENTHREADS_FOUND) (Required is at least version "3.4.0") Call Stack (most recent call first): C:/Program Files/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE) C:/Program Files/CMake/share/cmake-3.29/Modules/FindOpenSceneGraph.cmake:226 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) cmake/checks.cmake:280 (Find_Package) CMakeLists.txt:57 (CHECK_LIBRARIES)
自定义依赖引入疑问
找到初步解决方向,但需明确:如何将自行用Emscripten构建的依赖(如OpenSceneGraph-3.6.5、expat、curl、enet)接入Speed Dreams的构建流程?
最终解决发现
- 使用
emmake make install命令,可将自行构建好的依赖的库文件、include目录自动安装到Emscripten的sysroot目录,无需手动配置路径。 - 针对之前的依赖识别问题,还需手动修改CMake缓存文件,补全缺失的文件/目录路径后,重新执行
emcmake cmake即可继续构建。
内容的提问来源于stack exchange,提问作者Priscilla Lagunas
相关产品推荐
相关产品推荐

