在将 C 或 C++ 编译为 Web 程序集 ( clang/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
吗? - 是否可以禁用此行为,以便在未定义函数时出现链接器错误(可能除非它是已知在主机中可用的函数)?