Ich habe Probleme beim Erstellen einer portablen ausführbaren Datei mit Rost.
Das Ausführen einer ausführbaren Datei, die einfach mit cargo build
auf Ubuntu erstellt wurde, schlägt mit
Gebäude mit rustc ... -C link-args=-static
kann nicht korrekt verlinkt werden (Ausgabe von ld ./test
):
Gibt es einen Weg dazu, außer dass man auf einem älteren System mit einer alten glibc-Version baut?
Glibc ist nicht statisch verknüpft (so wie wir es gerne gehabt hätten, es tut alles, um das zu verhindern). Daher sind die Systembibliotheken (libstd usw.) immer von der glibc-Version abhängig, auf der sie erstellt wurden. Dies ist der Grund, warum die Buildbots im Linux-Cluster mozilla alte Versionen von centos verwenden.
Leider zu diesem Zeitpunkt glaube ich, dass es keine Problemumgehung gibt, abgesehen davon, dass Sie sicherstellen, dass Sie auf einem System mit einem älteren glibc aufbauen, als Sie bereitstellen werden.
Um GLIBC-Fehler zu vermeiden, können Sie Ihre eigene Version von Rust gegen eine statische alternative libc, musl , kompilieren.
> Holen Sie sich die neueste stabile Version von musl und erstellen Sie sie mit der Option --disable-shared
:
baue dann Rust gegen musl:
%Vor%dann bauen Sie Ihr Projekt
%Vor%Weitere Informationen finden Sie im Abschnitt erweiterte Verknüpfungen in der Dokumentation.
>Wie in der Originaldokumentation berichtet:
Sie müssen jedoch möglicherweise Ihre nativen Bibliotheken gegen musl neu kompilieren bevor sie verlinkt werden können.
Sie können auch rostup verwenden.
Entfernen Sie den alten Rust, der von rustup.sh installiert wurde
%Vor%Installieren Sie das Rost
%Vor%Tags und Links ld rust static-linking rust-cargo