You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Emscripten将C++库移植到Wasm时测试套件出现链接错误

错误原因
  • 编译链配置错误:报错信息中的Undefined symbols for architecture x86_64说明当前实际使用的是本地原生编译器生成x86_64架构程序,没有正确切换到Emscripten编译链生成Wasm目标,属于编译环境配置问题。
  • 缺少程序入口:Emscripten构建可执行Wasm产物(后缀为.html/.js的输出目标)时,默认要求提供main函数作为程序启动入口,你当前的测试套件代码没有包含main函数,也没有链接带main函数的依赖库(比如单测框架的main组件)。
  • 参数触发额外限制:你使用的-s PROXY_TO_PTHREAD=1参数要求必须存在main函数,由Emscripten将入口逻辑代理到子线程运行,进一步放大了入口缺失的问题。
解决步骤
  • 修正编译链配置:运行CMake时必须使用emcmake cmake [原有CMake参数]命令替换原生cmake命令,确保编译工具链自动切换为Emscripten,后续编译使用emmake make,不要直接调用原生make,避免生成本地x86_64架构产物。
  • 补充程序入口:
    • 如果测试用的是GTest、Catch2等单测框架,给测试目标链接框架提供的main库(比如gtest_main)即可自动获得入口。
    • 如果不需要独立运行的可执行程序,只是要导出测试函数供外部调用,将测试目标的类型从可执行程序改为静态库/共享库,同时给链接参数添加-s NO_ENTRY=1,取消对main函数的要求,配合EMSCRIPTEN_KEEPALIVE宏导出你需要暴露的函数即可。
    • 如果你需要生成可直接运行的HTML测试页面,手动添加一个简单的main函数,内部调用你的测试逻辑即可。
  • 可选参数调整:如果不需要将主线程逻辑代理到pthread运行,可以先临时删除-s PROXY_TO_PTHREAD=1参数,验证链接问题解决后再按需开启该参数。

内容的提问来源于stack exchange,提问作者Quentamia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:45:03