Ich versuche, eine statische ausführbare Datei mit Rust zu erstellen. Ich bin nicht versuchen, eine bestimmte Bibliothek statisch zu verknüpfen, ich versuche, eine ausführbare Datei zu erstellen, die keine dynamische Verknüpfung überhaupt verwendet. Ich habe folgendes (sonst funktioniert) Test:Wie generiert man statisch verknüpfte ausführbare Dateien?
$ 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]
Notiere die dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2
. Statische ausführbare Dateien haben stattdessen statically linked
. (Und in meinem Fall corrupted section header size
, obwohl ich wäre angenehm erstaunt, wenn ich Rust überzeugen kann dass zu replizieren.)
Welche Möglichkeiten habe ich, um rustc
passieren müssen, um es eine tatsächliche statische ausführbare Datei (für Konkretion zu erzeugen : eine, die sogar file
stimmt, ist statisch verknüpft).
Vielleicht sind die C-Link-args = '...' Option können Sie helfen? – llogiq
Beachten Sie, dass sich Ihre Frage nur auf Linux bezieht - AFAIK, [Sie können keine ausführbaren Dateien unter OS X statisch verknüpfen] (https://developer.apple.com/library/mac/qa/qa1118/_index.html). Ich bin mir nicht sicher über Windows. – Shepmaster
Vielleicht möchten Sie einen Blick auf [mit Hilfe von Müsl anstelle von Glibc mit Rost] werfen (https://github.com/rust-lang/rust/pull/24777) –