#码力全开·技术π对#使用Emscripten编译C++到WASM时,如何解决​​Module._malloc​​​未定义的运行时错误

使用Emscripten编译C++到WASM时,如何解决​​Module._malloc​​​未定义的运行时错误?
​代码示例​

// example.cpp
#include <emscripten.h>
EMSCRIPTEN_KEEPALIVE
void process_data(uint8_t* ptr, int size){ /* ... */ }

​编译命令​

emcc example.cpp -o example.js -s EXPORTED_FUNCTIONS="['_process_data']"

​浏览器控制台报错​​:​​Uncaught ReferenceError: Module._malloc is not defined​


Emscripten
最多选5个技能
2025-05-15 07:41:22
浏览
收藏 0
回答 1
已解决
回答 1
按赞同
/
按时间
key_3_feng
key_3_feng

在使用 Emscripten 编译 C++ 到 WASM 时,若遇到 ​​Module._malloc​​ 未定义的错误,通常是因为未正确导出或初始化内存管理函数。解决方法如下:

确保内存分配支持
在编译命令中添加 -s EXPORT_MEMORY 参数,显式导出内存指针(如 HEAP8, HEAPU8 等),并确保 malloc 被导出:

emcc example.cpp -o example.js -s EXPORTED_FUNCTIONS="['_process_data','_malloc']" -s EXPORT_MEMORY

延迟调用时机
在 JavaScript 中调用 Module._malloc 前,需等待模块初始化完成。使用 Module.onRuntimeInitialized 回调:

Module.onRuntimeInitialized = () => {
  const ptr = Module._malloc(size);
  // 使用 ptr 后需手动调用 _free
};
分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-25 22:12:35
发布
相关问题
如何避免错误内容生成
217浏览 • 1回复 待解决
提问