emscripten - WebAssembly 链接错误 : _sprintf function import requires a callable

标签 emscripten webassembly emcc

在 JS 中从 Emscripten 编译的 WASM 创建 WebAssembly.Instance,其中包括对 sprintf 的调用,会导致此错误:

Uncaught (in promise) LinkError: WebAssembly.Instance(): Import #1 module="env" function="_sprintf" error: function import requires a callable...



sprintf 不是 included by 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 时如何避免?

最佳答案

Is sprintf not included by Emscripten as part of libc?



您正在使用 SIDE_MODULE=1 进行编译根据定义,它不会链接到系统库中。

您可以提供自己的 sprintf 实现或者停止编译为侧模块并让 emscripten 为您处理它。

关于emscripten - WebAssembly 链接错误 : _sprintf function import requires a callable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260941/

相关文章:

c++ - 为什么 Emscripten 的 Intellisense 找不到 SDL2/SDL.h 的包含路径?

c++ - webassembly 和 get_nprocs()

clang - 在 C 代码中使用 memcpy 并使用 wasm 目标进行编译时出现 llvm-link 错误

gcc - 如何在 Emscripten 中设置 gcc 标志

java - 使用java嵌套#if宏处理

javascript - 你如何调用一个 C 函数,它通过 Emscripen/Wasm 从 JS 中按值获取(或返回)一个结构?

http.Client 在编译为 wasm 的 Go 中不起作用

c# - 在客户端 wasm 代码中包含密码是否安全?

c - EM_JS 无法导出 emscripten 中的函数