Rust/Cargo link 静态到 MSVCRT 吗?

Does Rust/Cargo link statically to MSVCRT?

在Windows中,编译C++时,我可以指定/MT compiler option使用运行时库的静态版本,即。 不是 link动态到 MSVCRT。

Rust/Cargo 在这方面表现如何,因为没有这样的选择? link 是静态的还是动态的?

我想你可以指定它。这是启用它的 RFC: https://github.com/rust-lang/rfcs/blob/master/text/1721-crt-static.md

rustc book 中有一个页面提到了它。

This also supports the feature +crt-static and -crt-static to control static C runtime linkage.

创建一个名为 .cargo/config.toml 的文件,您可以在其中指定 rustflags

https://doc.rust-lang.org/cargo/reference/config.html

里面config.toml

...

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

虽然我还没有尝试过,但我想它应该有用。

您可以在 .cargo 文件中指定目标:

[build]
target = "x86_64-pc-windows-msvc"

也可以通过命令行设置默认 target

Cargo.toml 中需要指定库类型(在您的情况下 "staticlib")。

[lib]
name = "libname"
crate-type = ["dylib", "staticlib"]