我有一个生锈库如下常用结构:如何编译一个Rust库来定位asm.js?
Cargo.toml
src
|--lib.rs
.cargo
|--config (specifies target=asmjs-unknown-emscripten)
target
|......
当我做cargo build
,我得到下目标调用asmjs-unknown-emscripten
一个新的目录,但我期望的.js文件不存在。
As this user notes,你必须做一些特殊的导出功能,除了它们标记公众asm.js:
基本上,你有这个样板现在:
#[link_args = "-s EXPORTED_FUNCTIONS=['_hello_world']"] extern {} fn main() {} #[no_mangle] pub extern fn hello_world(n: c_int) -> c_int { n + 1 }
然后你可以在您的JavaScript中使用此访问和调用功能:
var hello_world = cwrap('hello_world', 'number', ['number']); console.log(hello_world(41));
但是,Rust抱怨#[link_args...]
指令已过时。有没有任何文件可以解释这是如何工作的?
你见过[编译Rust到你的浏览器](http://www.hellorust.com/emscripten/)? – Shepmaster
是的,我掠过它,但我可能会错过一些东西。我看到的唯一代码示例(锈蚀)只是用#[no_mangle]注释公共函数。这似乎不适用于我的目的。我注意到他们正在使用rustc而不是货物......?这个[link](http://www.hellorust.com/emscripten/demos/04-call-into-lib/)似乎是上面用户评论的来源,但link_args仍然被弃用 - 这是怎么回事与空的main(){}? – user1935361