imi*_*ers 7 rust asm.js webassembly
我有一个生锈的项目,我正在编写webasm每http://asquera.de/blog/2017-04-10/the-path-to-rust-on-the-web/
项目编译.当我在Chrome Canary中运行它时,内存不足并给我一个非常有用的错误消息:
abort("Cannot enlarge memory arrays. Either (1) compile with -s
TOTAL_MEMORY=X with X higher than the current value 16777216, (2) compile
with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime,
...
Run Code Online (Sandbox Code Playgroud)
问题是,它不清楚如何将这些标志传递给rustc /构建工具链.
既未设置EMMAKEN_CFLAGS,也未设置以下工作:
cargo rustc -v --target=wasm32-unknown-emscripten --release -- -Clink-args="-s TOTAL_MEMORY=33554432"
Run Code Online (Sandbox Code Playgroud)
这篇博文提供了一个我认为也可以应用于您的情况的解决方案:
据我所知,没有办法通过货物传递大多数链接器参数。相反,可以通过指定一个自定义链接器来绕过该限制,该链接器实际上是包装真实链接器的 shell 脚本。
创建一个像emcc_link这样使用适当选项调用 emscripten 的 shell 脚本:
emcc "-s" "TOTAL_MEMORY=33554432" $@
Run Code Online (Sandbox Code Playgroud)
(您可能需要其他选项才能使其正常工作。有关详细信息,请查看博客文章。)
并通过编辑/创建指定将其用于您的项目.cargo/config:
[target.wasm32-unknown-emscripten]
linker = "/your/project/dir/emcc_sdl"
[target.asmjs-unknown-emscripten]
linker = "/your/project/dir/emcc_sdl"
Run Code Online (Sandbox Code Playgroud)
我无情地假设构建环境是Linux之类的。在 Windows 上,shell 脚本可能应该是批处理脚本,我不确定.cargo/config.
免责声明:我还没有尝试过这些。