我正在尝试将一些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访问这些功能?
答案 0 :(得分:0)
它们很可能被您的C ++编译器所破坏。将它们声明为extern "C"
可以避免这种情况:
extern "C"
GOL_Instance *
GOL_Instance_new() {
...