Estou construindo o seguinte programa em Rust:
fn main() {
println!("Hello, world!\n");
}
em um sistema Devuan Excalibur (como Debian Trixie, mas sem systemd; rustc versão 1.84). Depois de construí-lo (com cargo build --release
), eu tenho:
$ 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)
Isso é um pouco estranho, como acontece com um programa C hello-world:
#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}
e GCC 14.2 ( gcc -O3
), obtenho:
$ 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)
ou seja, nenhuma libgcc_s
dependência. O que o compilador Rust está colocando no meu executável que precisa da dependência extra, e por quê?
Observação: primeiro fiquei pensando sobre as diferenças no tamanho do executável; mas isso é abordado nesta pergunta .
Presumivelmente, isso é uma dependência da biblioteca padrão Rust. Se você construir um crate binário Rust simples com o
no_std
atributo, ele não vincula contralibgcc_s
(no meu sistema, pelo menos).Links
gcc_s
da biblioteca padrão do Rust para desenrolamento em certas configurações :