我正在用 Rust 构建以下程序:
fn main() {
println!("Hello, world!\n");
}
在 Devuan Excalibur 系统上(类似 Debian Trixie,但没有 systemd;rustc 版本 1.84)。构建后(使用cargo build --release
),我有:
$ ldd target/release/hello
linux-vdso.so.1 (0x00007fff356f5000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0b073c5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0b071cf000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0b0749c000)
这有点奇怪,就像一个 hello-world C 程序一样:
#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}
和 GCC 14.2(gcc -O3
),我得到:
$ ldd hello
linux-vdso.so.1 (0x00007fff1d573000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8f1649f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8f166e5000)
也就是说,没有libgcc_s
依赖项。Rust 编译器在需要额外依赖项的可执行文件中放入了什么?为什么?
注意:我首先对可执行文件的大小差异感到疑惑;但这个问题已经解决了。