【发布时间】:2018-03-21 08:08:23
【问题描述】:
通过运行emcc -O3 -s WASM=1 -s SIDE_MODULE=1 -o sum.wasm sum.c,我可以从以下 C 代码生成一个相当小的(203 字节)wasm 文件。
#include <emscripten/emscripten.h>
int EMSCRIPTEN_KEEPALIVE sum(int a, int b) {
return a + b;
}
反汇编输出:
(module
(type $0 (func (param i32 i32) (result i32)))
... trim 9 lines ...
(export "_sum" (func $0))
(func $0 (type $0) (param $var$0 i32) (param $var$1 i32) (result i32)
(i32.add
(get_local $var$1)
(get_local $var$0)
)
)
... trim 17 lines ...
)
但鉴于以下 Rust 代码
pub fn main() {}
#[no_mangle]
pub extern fn sum(a: i32, b: i32) -> i32 {
a + b
}
我似乎无法产生类似的东西。
rustc -O --target=wasm32-unknown-emscripten sum.rs 有效,但给了我一个 85k 的 wasm 文件和一个 128k 的 js 文件。
我尝试导出 EMMAKEN_CFLAGS='-s WASM=1 -s SIDE_MODULE=1' 但这给了我一些警告,例如
输入文件“/tmp/.../rust.metadata.bin”存在,但不是适合 Emscripten 的 LLVM 位码文件。也许不小心将原生构建的目标文件与 Emscripten 混合在一起?
然后链接失败。
我的 Rust 版本是 1.22.0-nightly (c6884b12d 2017-09-30),我的 emcc 版本是 1.37.21。
我做错了什么?
【问题讨论】:
-
哈,搜索了一个星期,我什么也没找到。然后在发布这个问题几分钟后,我发现this 可以回答它。一旦我测试它会报告。
标签: rust webassembly