为什么 emscripten 不编译我的函数?

Why won't emscripten compile my functions?

本文关键字:函数 我的 编译 emscripten 为什么      更新时间:2023-10-16

我正在尝试将一些c ++代码编译为包含函数的wasm二进制文件。但是,即使我在编译过程中没有收到任何编译错误或任何其他警告,emscripten 生成的文件也不包括我用"-s EXPORTED_FUNCTIONS=['....']"导出的函数

这是包含我要导出的函数的文件: https://pastebin.com/B5w1R4BC

这是我正在使用的编译命令:

em++ -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 
-Igameoflife/include -Os -DNDEBUG 
-s EXPORTED_FUNCTIONS="['_GOL_Instance_new', '_GOL_Instance_destroy', '_GOL_Init', '_GOL_Step', '_GOL_get_values']" 
-o gol.js gameoflife/src/cellmap.cpp bridge.cpp

运行没有任何问题。

但是,当我将"gol.js"导入 javascript 时,Module 对象无法访问我尝试包含的任何函数(我在调用这些函数之前等待模块初始化(。

TypeError: Module._GOL_Instance_new is not a function

为什么我不能通过wasm访问这些功能?

它们很可能被您的C++编译器破坏了。将它们声明为extern "C"以避免这种情况:

extern "C"
GOL_Instance *
GOL_Instance_new() {
...