Jam*_*les 5 emscripten asm.js webassembly
我很好奇是否有可能让emscripten构建一个没有libc的二进制文件.
如果我有simple.c:
int add1(int x) {
return x + 1;
}
Run Code Online (Sandbox Code Playgroud)
而且我不想包含任何libc,这可能吗?
到目前为止,我最好的尝试是:
emcc simple.c -s NO_FILESYSTEM=1 -s DISABLE_EXCEPTION_CATCHING=1 -s DEFAULT_LIBRARY_FUNCS_TO_INCLUDE='[]' -s LIBRARY_DEPS_TO_AUTOEXPORT='[]' -s EXPORTED_FUNCTIONS='["add1"]' -s USE_SDL=0 -o simple.js -nostdlib
Run Code Online (Sandbox Code Playgroud)
但生成的输出仍包含malloc符号,字符串转换例程等.
我也对生成webassembly的过程感兴趣; 也就是说,我的真正目标是生成一个只包含单个函数的webassembly模块.这可能与emscripten有关吗?
Emscripten 目前不太适合此用例。目标文件是位码,任何时候使用链接时,它都希望包含一些库和 JS 模块代码。
对于 WebAssembly,可以使用上游 LLVM 主干的 clang 以及Binaryens2wasm的工具。Clang(可选地与 LLVM 的工具结合使用)可以生成一个可以转换为(WebAssembly 的文本格式)的程序集文件。可以使用 Binaryen 的工具或WABT的工具将该文件转换为 wasm 二进制文件。该管道会将 C 文件中对函数的任何未定义引用转换为 wasm 导入,您需要手动将其连接到 JavaScript 函数。互联网上有一些这样的例子(我通过谷歌搜索“webassemble clang s2wasm”找到了一些)。另请注意,链接器的工作是布置 wasm 线性内存,并且它有几个您需要注意的选项;查看其帮助输出及其来源,例如工具和链接器代码。llc.ss2wasmwastwasm-aswast2wasms2wasm
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |