При компиляции C или C ++ в веб-сборку (лязг / LLVM / binaryen) неопределенные функции импортируются из «env».
Например
extern "C" int afunc();
int main() {
return afunc();
}
компилируется в
(module
(type $FUNCSIG$i (func (result i32)))
(import "env" "afunc" (func $afunc (result i32)))
(table 0 anyfunc)
(memory $0 1)
(export "memory" (memory $0))
(export "main" (func $main))
(func $main (result i32)
(call $afunc)
)
)
Я думаю, линия (import "env" "afunc" (func $afunc (result i32)))
означает, что он пытается запросить функцию afunc
из среды хоста. Тем не менее, я не нашел документации о том, что среда хоста должна быть названа env
,
Можно ли осуществлять некоторый контроль над импортом этих хостов?
В частности,
env
?В настоящее время самый простой способ компилировать C и C ++ — это emscripten. Упомянутые вами компоненты — это все компоненты, но emscripten — это полный набор инструментов, который поддерживает комплексное построение и включает в себя все необходимые вам части, включая libc / libc ++ и множество других полезных библиотек. Он поддерживает таргетинг как asm.js, так и wasm.
Бит «env» является поведением по умолчанию s2wasm
который предназначен для работы с emscripten. Emscripten имеет стандартные библиотеки (например, libc) и связывает их с вашим кодом, а также предоставляет некоторые его функции в виде кода JavaScript, который также автоматически включается в ваш модуль. Это устанавливает env
импортировать и автоматически создает экземпляр вашего модуля с ним.
Других решений пока нет …