webassembly c++ 实站记录,cocos h5

1.安装emcc
网上有很多教程,因此简单说明即可。需要的环境:1.Git;2.python(安装最新版即可,安装emcc时自动会再下载自己需要的python版本);3.系统编译工具,我安装的是VS2022。

本地下载源码: git clone https://github.com/emscripten-core/emsdk.git
安装SDK: ./emsdk.bat install latest
这时出现问题: [ssl 问题] 》》》 更新urllib3 pip install urllib3 --upgrade
激活SDK: ./emsdk.bat activate latest
./emsdk.bat activate --permanent latest //为当前用户设置永久的环境变量,避免每次编译运行emsdk_env.bat
./emsdk_env.bat
重启电脑后 才有emcc -v

2.编写c++ 编译成wasm
c++ 代码:

点击查看代码
#include <emscripten.h>
extern "C"
{
    EMSCRIPTEN_KEEPALIVE
    int add(int a, int b)
    {
        return a + b;
    }
    EMSCRIPTEN_KEEPALIVE
    const char *getMessage()
    {
        // Static string to return
        static const char message[] = "Hello from WebAssembly!";
        return message;
    }
}

编译
emcc wTest.c++ -g -s WASM=1 -o3 --no-entry -o test.wasm //-g开启调试模式,在chorme开发工具中调试

cocos客户端加载
将test.wasm 改为 test.bin放入工程

点击查看代码 ``` BundleTool.instance().loadFromBundle("resources","test",BufferAsset).then((assert)=>{ WebAssembly.instantiate(assert.buffer()).then((ins)=>{ const instance = ins.instance; const memory = new Uint8Array(instance.exports.memory.buffer); // Call the getMessage function const messagePtr = instance.exports.getMessage(); // Read the null-terminated string from memory let message = ''; for (let i = messagePtr; memory[i] !== 0; i++) { message += String.fromCharCode(memory[i]); } console.log(message); console.log("wasm",instance.exports.add(4,5)); }).catch((err)=>{ console.log(err); }) }) ```
posted @ 2025-04-29 09:35  abc126655  阅读(43)  评论(0)    收藏  举报