RuntimeError: unreachable при попытке вызвать функцию, содержащую импортированную функцию

Рейтинг: 0Ответов: 1Опубликовано: 25.06.2023

Есть код на C, который компилируется в wasm. Код использует функцию, импортированную из JS.
При попытке запустить любую функцию C, в которой содержится вызов импортированной функции, происходит ошибка "RuntimeError: unreachable".

Код на С:

extern int jspow(int a, int b);

int func(int a, int b){
    return jspow(a, b);
}

Команда для компиляции:
clang --target=wasm32 -nostdlib -Wl,--no-entry -Wl,--export-all -Wl,--unresolved-symbols=ignore-all -o test.wasm test.c

Код на JS:

const imports = {
    jspow: function(a, b){
        return Math.pow(a, b);
    }
}

async function wasm_run(url){
    const bytes = await (await fetch(url)).arrayBuffer();
    return (await WebAssembly.instantiate(bytes, { imports: imports }));
}

(async ()=>{
    const { module, instance } = await wasm_run('test.wasm');
    console.log(instance.exports.func(3, 2));
})();

Ответы

▲ 1Принят

Долго бился над этой же задачей, попробуй заменить -Wl,--unresolved-symbols=ignore-all на -Wl,--allow-undefined