link arg未将编译器选项传递给rustc

link arg未将编译器选项传递给rustc,rust,asm.js,Rust,Asm.js,我正在从一个Rust文件生成asm.js,如下所示: rustc demo.rs --target asmjs-unknown-emscripten -C opt-level=0 -C link-arg="-s MINIMAL_RUNTIME=1" -C link-arg="-s ENVIRONMENT=web" -C link-arg="-s LEGACY_VM_SUPPORT=1" -o ../../build/bytecode/demo.asm.js 但是,当我查看生成的asm.js文件

我正在从一个Rust文件生成asm.js,如下所示:

rustc demo.rs --target asmjs-unknown-emscripten -C opt-level=0 -C link-arg="-s MINIMAL_RUNTIME=1" -C link-arg="-s ENVIRONMENT=web" -C link-arg="-s LEGACY_VM_SUPPORT=1" -o ../../build/bytecode/demo.asm.js
但是,当我查看生成的asm.js文件时,我可以清楚地看到这些编译器选项没有被传递-代码仍然假设它可以在任何环境中运行,并且缺少遗留的VM多填充

我错过了什么

这是防锈锉,以防发生以下情况:

#[allow(dead_code)]
pub fn my_add(num1: f64, num2: f64) -> f64 {
    return num1 + num2;
}

pub fn main() {
    println!("Rust loaded");
}

我有两个建议

如果我们看一下,有
linkarg
选项可以传递单个参数,也有
linkargs
选项可以传递多个参数。由于存在
链接参数
,并且文档指定参数必须用空格分隔,因此您可能应该使用
。。。link args=“-s MINIMAL_RUNTIME=1”
,甚至
-C link arg=“-s”-C link arg=“MINIMAL_RUNTIME=1”…
不过还没有尝试过

第二,似乎有一种古老的方法,根据这个方法将参数传递给特定编译器的链接器。通过在项目文件夹中创建名为
emcc_sdl
的文件,可以围绕
emcc
编译器创建包装器,该文件包含:

emcc "-s" "MINIMAL_RUNTIME=1" "-s" "ENVIRONMENT=web" "-s" "LEGACY_VM_SUPPORT=1" $@
使其可执行:

> chmod +x emcc_sdl
创建或编辑
.cargo/config
文件并添加:

[target.wasm32-unknown-emscripten]
linker = "/project_dir/project_name/emcc_sdl"

[target.asmjs-unknown-emscripten]
linker = "/project_dir/project_name/emcc_sdl"
您应该能够使用以下方法进行构建:

rustc demo.rs --target asmjs-unknown-emscripten -C opt-level=0 -o ../../build/bytecode/demo.asm.js

希望有帮助。

使用
-s
的目的是什么?任何引用此标志的文档?@VictorDeleau我正在尝试将编译器选项传递给Emscripten编译器:--target asmjs unknown Emscripten指向Emscripten编译器,该编译器可以识别这些标志。明白了。我用两种可能的解决方案更新了我的答案