用cargo build如何静态编译
时间: 2024-04-12 16:27:46 浏览: 337
要使用 `cargo build` 进行静态编译,你需要在 `Cargo.toml` 文件中添加一些配置。首先,确保你的目标平台是支持静态编译的,比如 `x86_64-unknown-linux-musl`。接下来,你需要在 `Cargo.toml` 文件的 `[target.'cfg(target_os = "linux")'.dependencies]` 部分添加以下依赖项:
```toml
[target.'cfg(target_os = "linux")'.dependencies]
libc = "0.2"
```
然后,在 `src/main.rs` 文件中添加以下代码段:
```rust
#[cfg(target_os = "linux")]
extern crate libc;
fn main() {
#[cfg(target_os = "linux")]
{
// 设置静态链接
let target = std::env::var("TARGET").unwrap();
if target.contains("musl") {
println!("cargo:rustc-link-lib=static=c");
println!("cargo:rustc-link-lib=static=dl");
println!("cargo:rustc-link-lib=static=pthread");
println!("cargo:rustc-link-lib=static=rt");
} else {
println!("cargo:rustc-link-lib=static=stdc++");
println!("cargo:rustc-link-lib=static=gcc");
}
// 设置链接标志
let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let lib_dir = std::path::Path::new(&manifest_dir).join("target").join(target).join("release");
println!("cargo:rustc-link-search=native={}", lib_dir.display());
}
}
```
最后,运行 `cargo build --target x86_64-unknown-linux-musl --release` 命令进行静态编译。这将生成一个静态可执行文件,可以在目标平台上运行而无需动态链接其他库。请根据你的目标平台调整命令中的 `--target` 参数。
阅读全文