Как вызвать printf в Webassembly?

Ошибка:
test2.html:1 Uncaught (in promise) LinkError: WebAssembly.instantiate(): Import #0 module="env" function="iprintf" error: function import requires a callable
function loadWebAssembly(filename, imports = {}) {
  return fetch(filename)
    .then((response) => response.arrayBuffer())
    .then((buffer) => {
      imports.env = imports.env || {};
      Object.assign(imports.env, {
        memoryBase: 0,
        tableBase: 0,
        __memory_base: 0,
        __table_base: 0,
        memory: new WebAssembly.Memory({ initial: 256, maximum: 256 }),
        table: new WebAssembly.Table({
          initial: 0,
          maximum: 0,
          element: "anyfunc",
        }),
        square: (a) => a * a,
        print: () => console.log("Hello world"),
      });
      return WebAssembly.instantiate(buffer, imports);
    })
    .then((result) => result.instance);
}
function main() {
  loadWebAssembly("test.wasm").then((instance) => {
    const square = instance.exports._Z6squarei;
    console.log(instance.exports);
    console.log("2^2 =", square(2));
  });
}

#include <emscripten.h>
#include <cstdio>

EMSCRIPTEN_KEEPALIVE
int square (int x) {
  return x * x;
}
EMSCRIPTEN_KEEPALIVE
void print () {
  printf("Hello world");
}

Собираю вот так: em++ test2.cpp -Os -s WASM=1 -s SIDE_MODULE=1 -o test.wasm
До того как добавил функцию print все работало.
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
17 янв. 2021, в 08:35
50000 руб./за проект
17 янв. 2021, в 01:26
100000 руб./за проект
16 янв. 2021, в 22:34
10000 руб./за проект