Rust/Cargo是否静态链接到MSVCRT?

4
在Windows上编译C++时,我可以指定/MT编译选项来使用运行库的静态版本,即动态链接到MSVCRT。
由于Rust/Cargo没有这样的选项,它的行为如何?它是静态链接还是动态链接?
1个回答

7
我认为你可以指定它。这是使其可用的RFC:https://github.com/rust-lang/rfcs/blob/master/text/1721-crt-static.md
rustc book页面中也提到了它。
引用:

这还支持特性+crt-static和-crt-static以控制静态C运行时链接。

创建一个名为.cargo/config.toml的文件,然后在其中可以指定rustflags。在config.toml内部。 https://doc.rust-lang.org/cargo/reference/config.html
...

[build]
rustflags = ["-C", "target-feature=+crt-static"]
...

虽然我还没有尝试过,但我想这应该可以工作。


你有一个如何将这样的选项添加到Cargo.toml的示例吗? - rodrigocfd
我不确定如何在 Cargo.toml 中实现,但您可以为其设置环境变量 export CARGO_CFG_TARGET_FEATURE=crt-static,至少这是 RFC 所说的。 - Hadus
3
或者另一个来自RFC的例子:RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc - Hadus
1
我编辑了答案,这样你就可以在config.toml中指定rustflags而不是环境变量。 - Hadus
我得到了“错误:未知的代码生成选项:target-feature”,不知道出了什么问题。 - rodrigocfd
1
我最终在命令行中传递了链接器标志:RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc。谢谢。 - rodrigocfd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接