我正在尝试使用Rust创建一个静态可执行文件。我不试图静态链接特定的库,我正在尝试创建一个根本不使用动态链接的可执行文件。我有以下(否则正在工作)测试:
$ cat hello.rs
fn main()
{
print!("Hello, world!\n");
}
$ rustc hello.rs -o hello
$ file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, [etc]
请注意dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2
。静态可执行文件改为statically linked
。 (在我的情况下corrupted section header size
,如果我能说服Rust复制 ,我会感到非常惊讶。)
我需要将哪些选项传递给rustc
以使其生成实际的静态可执行文件(具体:偶数file
同意的是静态链接的。)
答案 0 :(得分:18)
默认情况下,Rust会静态链接除glibc(和libgcc,iirc)之外的所有内容。
如果要获得100%静态链接的二进制文件,可以使用MUSL和1.1。 https://github.com/rust-lang/rust/pull/24777是最初的支持,我们希望将来更容易使用。
答案 1 :(得分:12)
Since Rust 1.19,您可以静态链接C运行时(CRT)以避免在Windows上出现这种非常常见的情况:
程序无法启动,因为您的VCRUNTIME140.dll丢失了 电脑。尝试重新安装该程序以解决此问题。
使用您平台的相应目标三元组将其添加到您的.cargo/config
文件中:
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
编辑.cargo/config
的另一种方法是手动将-C target-feature=+crt-static
传递给rustc。
另见: