Rust 编译到 Web 平台 - 哆啦比猫的技术瞎扯 - Arch Linux · ドラえもん · 实时绘制
Rust 编译到 Web 平台
本文简单介绍如何把 Rust 程序编译到 WebAssembly,从而在浏览器里运行。网上虽然有一些类似的文章,但都是基于 macOS 命令行的。macOS 就是喜欢把简单的事情搞复杂(果然正统 UNIX 都是垃圾)。本文以 Arch Linux 为中心介绍如何配置环境。
# pacman -S rustup emscripten
老规矩,#
开头表示以 root 权限执行,$
开头表示以普通用户权限执行。
这里从源里安装了 Rustup,这样做有一大好处,就是不用设置 PATH
。To set PATH
in .bashrc
or .bash_profile
or .zshrc
or $XDG_CONFIG_HOME/fish/config.fish
or even /etc/profile.d/*.sh
: that is the question. 至于为什么可以不设置 PATH
:
$ which rustc /usr/bin/rustc $ ll /usr/bin/rustc Permissions Size User Group Date Modified Name lrwxrwxrwx 15 root root 2017-09-02 01:38 /usr/bin/rustc -> /usr/bin/rustup
Emscripten 自然也要设置一堆环境变量。emscripten
包已经自动设置了,就在 /etc/profile.d/emscripten.sh
里。重新登录使其生效。
接着就是配好 Rust 工具链然后编译了(所有国外的东西,一旦有下载都可能要梯子, 我就不强调了):
$ rustup update stable # 笔者此时是 Rust 1.20 $ rustup target add wasm32-unknown-emscripten $ cargo init --bin hello # 创建空可执行项目,内置输出 hello world 的功能 $ cd hello $ rustc --target=wasm32-unknown-emscripten src/main.rs -o main.html
调用 rustc
时会调用 Emscripten 里的 emcc
,如果是第一次运行会下载一些东西(笔者此时是 emscripten port binaryen 37)。如果你下载的也是这个版本, 在 rustc
过程中会出错。循着错误找到对应文件,人肉打补丁:https://github.com/WebAssembly/binaryen/pull/1196。
最后就是运行了。由于生成的 js 脚本是通过 AJAX (Fetch API) 载入 wasm 的,必须有服务器才能运行。好在 Emscripten 自带服务器:
$ emrun main.html
该命令启动服务器并打开默认浏览器。然后就可以看到屏幕中间出现黑底白字 “Hello, world!” 了。
展望
凡未特殊声明(转载/翻译),所有文章均为原创。
by Giumo Xavier Clanjor (哆啦比猫/兰威举), 2010-2019.
本作品采用知识共享署名·非商业性使用·相同方式共享 3.0 中国大陆许可协议进行许可。
文中凡未特殊声明且未声明为引用的代码均以 MIT 协议授权。