【发布时间】:2017-12-22 10:13:54
【问题描述】:
在将 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)))这行意味着它试图请求函数afuncfrom the host environment。但是,我没有发现应该将主机环境命名为 env 的文档。
是否可以对这些主机导入施加一些控制? 具体来说,
- 我可以将其重命名为
env以外的名称吗? - 是否可以禁用此行为,以便在未定义函数时出现链接器错误(可能除非它是已知在主机中可用的函数)?
【问题讨论】:
-
你用什么命令来编译你的cpp文件浪费了?
-
this answer中描述的命令。
标签: c++ c webassembly