禁用/重命名从主机环境导入的内容”;环境"; 编译C或C++到Web汇编()时,未定义函数从“Env”导入。
比如说禁用/重命名从主机环境导入的内容”;环境"; 编译C或C++到Web汇编()时,未定义函数从“Env”导入。,c++,c,webassembly,C++,C,Webassembly,比如说 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
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是一个完整的工具链,支持构建端到端,包括您需要的所有部分,包括libc/libc++,以及各种其他有用的库。它支持以asm.js和wasm为目标
“env”位是设计用于emscripten的s2wasm的默认行为。Emscripten有标准库(如libc)并将它们链接到您的代码中,它还提供了一些JavaScript代码的功能,JavaScript代码也自动包含在您的模块中。它设置
env
导入并自动实例化模块。您使用哪些命令将cpp文件编译为wast?中描述的命令。默认行为是否意味着可以更改?没有标志,但您可以更改中env
的值并重新编译它。