从Emscripten编译的WASM(包括对sprintf的调用)在JS中用JS创建WebAssembly.Instance会导致以下错误:
未捕获(承诺)LinkError:WebAssembly.Instance():导入#1 module =“ env” function =“ _sprintf ”错误:函数导入需要可调用的...
是的sprintf不包括由Emscripten作为libc中的一部分?
编码:
#include <stdio.h>
extern "C" {
int main() {
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
return 0;
}
}
编译命令:
emcc src/test.cpp -O3 -s WASM=1 -s SIDE_MODULE=1 -o out/test.wasm
该EMCC编译运行没有错误。
注释掉sprintf行运行,没有错误,按预期返回0。
此错误的原因是什么,使用sprintf时如何避免?
Emscripten不将sprintf包含在libc中吗?
您正在编译SIDE_MODULE=1
,根据定义,这些库在系统库中未链接。
您可以提供自己的实现,sprintf
也可以停止作为侧模块进行编译,并允许emscripten为您处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句