Statisches Swift-Binary für Linux

Am 20.08.2021 um 17:37
von ridcully, Kategorie: Blog, Tags: Swift Linux

Swift Binaries brauchen normalerweise die Swift-Standard-Bibliothek. Möchte man ein Programm also auf einem anderen Rechner laufen lassen, muss diese Bibliothek installiert sein. Unter OSX ist das kein Problem, da das Betriebssystem die passenden Bibliotheken seit etlicher Zeit mitliefert, und es ist nicht mal vorgesehen. Somit kann man unter OSX einfach ein Release-Binary compilieren.

swift build -c release

Für Linux bedeutet das aber, dass die Swift-Bibliothek manuell installiert werden muss, oder diese mit dem Programm geliefert werden müssen. Die Bibliotheken werden normalerweise mit dem Swift-Compiler installiert. Ohne die Bibliotheken laufen die Programme nicht. Jedoch kann man mit neueren Releases von Swift auch unter Linux ein statisches Binary compilieren. Dadurch wird das fertige Binary wesentlich größer, aber das Programm läuft auch auf anderen Systemen ohne das Swift installiert sein muss:

swift build -c release -Xswiftc -static-executable
# Optional können noch die Debug-Symbole entfernt werden,
# so dass das fertige Binary ein wenig kleiner wird:
strip .build/release/Application

Ein statisches Binary unter Linux bedeutet jedoch nicht, dass nicht trotzdem einige Bibliotheken dynamisch nachgeladen werden. Dies trifft vor allem auf die libc zu. Ist auf einem System eine alte libc installiert, kann es trotzdem vorkommen, dass das Binary nicht läuft.

Im Zweifel sollte man also alle Bibliotheken die ein Programm braucht mitliefern. Kopiert man diese in ein lib-Verzeichnis, kann man unter Linux den Pfad zu den vorhandenen Bibliotheken beim Aufruf angeben:

LD_LIBRARY_PATH="./lib" ./Application

Build @ 2022-11-05T23:02:03+01:00