rust - ¿Cómo generar ejecutables enlazados estáticamente?
static-linking (2)
Estoy tratando de crear un ejecutable estático con Rust. No estoy tratando de vincular estáticamente una biblioteca en particular, estoy tratando de crear un ejecutable que no utilice enlaces dinámicos en absoluto . Tengo la siguiente prueba (de lo contrario, estoy trabajando):
$ 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]
Tenga en cuenta que el dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2
. Los ejecutables estáticos se han statically linked
lugar. (Y en mi caso el corrupted section header size
, aunque me sorprendería gratamente si pudiera convencer a Rust para que replicara eso ).
¿Qué opciones tengo que pasar a rustc
para que genere un ejecutable estático real (por concreción: uno que incluso el file
está de acuerdo está estáticamente vinculado).
Rust vincula de forma estática todo menos glibc (y libgcc, iirc) de forma predeterminada.
Si desea obtener un binario 100% estáticamente vinculado, puede usar MUSL con 1.1. https://github.com/rust-lang/rust/pull/24777 es el soporte inicial, esperamos que sea mucho más fácil de usar en el futuro.
Mi caso de uso es este, quiero evitar esta situación muy común en Windows:
El programa no puede iniciarse porque VCRUNTIME140.dll falta en su computadora. Intente reinstalar el programa para solucionar este problema.
Esta solución funciona, pero actualmente solo en todas las noches (06/06/2017). Agregue esto a su archivo .cargo / config (use el objetivo objetivo apropiado para su plataforma):
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
Una alternativa para editar la configuración de la carga es pasar -C target-feature=+crt-static
a rustc a mano.
RFC: https://github.com/rust-lang/rfcs/blob/master/text/1721-crt-static.md
Solicitud de extracción: https://github.com/rust-lang/rust/pull/37545
Configuración de carga: http://doc.crates.io/config.html