生锈,WebAssembly和传递参数以增加总内存

我有一个生锈的项目,我正按照http://asquera.de/blog/2017-04-10/the-path-to-rust-on-the-web/编译成webasm。

项目编译。 当我在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, 
...

问题是,它不清楚如何将这些标志传递给rustc /构建工具链。

无论是设置EMMAKEN_CFLAGS还是以下工作:

cargo  rustc -v --target=wasm32-unknown-emscripten --release -- -Clink-args="-s TOTAL_MEMORY=33554432" 

这篇博客文章提供了一个我认为可以应用于您的案例的解决方案:

尽我所知,无法通过货物传递大多数链接器参数。 相反,通过指定一个自定义链接器来解决这个限制,该链接器实际上是一个封装了真正链接器的shell脚本。

创建一个像emcc_link这样的shell脚本,它可以用适当的选项调用emscripten:

emcc "-s" "TOTAL_MEMORY=33554432" $@

(您可能需要其他选项才能使其工作。请查看博客文章了解详细信息。)

并通过编辑/创建.cargo/config指定将它用于您的项目:

[target.wasm32-unknown-emscripten]
linker = "/your/project/dir/emcc_sdl"

[target.asmjs-unknown-emscripten]
linker = "/your/project/dir/emcc_sdl"

我无情地认为构建环境是Linux或类似的。 在Windows上,shell脚本应该可能是批处理脚本,我不确定在.cargo/config是否有任何区别。

免责声明:我还没有尝试过这一点。

链接地址: http://www.djcxy.com/p/40259.html

上一篇: rust, WebAssembly, and passing arguments for increased total memory

下一篇: Understanding How to Store Web Push Endpoints