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"]
在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"]