Отключить / переименовать импорт из среды хоста «env»

При компиляции 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?
  • Можно ли отключить это поведение, чтобы я получил ошибку компоновщика, когда функция не определена (возможно, если она не известна как доступная на хосте)?

1

Решение

В настоящее время самый простой способ компилировать C и C ++ — это emscripten. Упомянутые вами компоненты — это все компоненты, но emscripten — это полный набор инструментов, который поддерживает комплексное построение и включает в себя все необходимые вам части, включая libc / libc ++ и множество других полезных библиотек. Он поддерживает таргетинг как asm.js, так и wasm.

Бит «env» является поведением по умолчанию s2wasm который предназначен для работы с emscripten. Emscripten имеет стандартные библиотеки (например, libc) и связывает их с вашим кодом, а также предоставляет некоторые его функции в виде кода JavaScript, который также автоматически включается в ваш модуль. Это устанавливает env импортировать и автоматически создает экземпляр вашего модуля с ним.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]