
Wenn ich beispielsweise ein einfaches C-Programm kompiliert habe, das GTK 3 auf einem Rechner mit Ubuntu verwendet, kann ich es dann auch auf anderen Linux-Varianten ausführen?
Hinweis: Meine eigentliche Frage lautet: „Soll ich mein kompiliertes Programm für Linux oder nur für Ubuntu kennzeichnen?“
Beispiel: Soll ich meine Download-Seite so kennzeichnen
Windows
program.exe
Linux
program
Macintosh
program.app
oder
Windows
program.exe
Ubuntu < Version 17.04
program
Macintosh
program.app
Antwort1
Ausführbare Linux-Dateien sind nicht spezifisch für eine bestimmte Linux-Distribution. Sie sind jedoch spezifisch für eine Prozessorarchitektur und eine Reihe von Bibliotheksversionen.
Eine ausführbare Datei fürbeliebigBetriebssystem ist spezifisch für eine Prozessorarchitektur. Windows- und Mac-Benutzer interessiert das nicht so sehr, da diese Betriebssysteme mehr oder weniger nur auf einer einzigen Architektur laufen. (OSX lief früher auf mehreren Prozessorarchitekturen, und OSX-Anwendungen wurden normalerweise als Paket verteilt, das Code für alle unterstützten Prozessorarchitekturen enthielt, aber das moderne OSX läuft nur auf amd64-Prozessoren. Windows läuft sowohl auf 32-Bit- als auch auf 64-Bit-Intel-Prozessoren, daher finden Sie möglicherweise „32-Bit“- und „64-Bit“-Windows-Programme.)
Windows löst das Bibliotheksabhängigkeitsproblem, indem es Programmierer dazu zwingt, alle von ihnen verwendeten Bibliotheken mit ihrem Programm zu bündeln. Unter Linux ist dies unüblich. Der Vorteil besteht darin, dass Programmierer keine Bibliotheken bündeln müssen und Benutzer zeitnahe Sicherheitsupdates und Fehlerbehebungen für Bibliotheken erhalten. Der Nachteil besteht jedoch darin, dass Programme für verschiedene Distributionsversionen unterschiedlich kompiliert werden müssen.
Daher sollten Sie Ihre Binärdatei als „Linux, 64-Bit-PC (amd64), kompiliert für Ubuntu 17.04“ (oder „32-Bit-PC (i386)“, wenn es sich um eine 32-Bit-ausführbare Datei handelt) kennzeichnen und die Details zu den erforderlichen Bibliotheken angeben. Sie können die von einer ausführbaren Datei verwendeten Bibliotheken mit dem ldd
Befehl „run“ anzeigen ldd program
. Der Teil davor =>
ist entscheidend, z. B. libgtk-3.so.0
ist die Hauptbibliothek von GTK3 mit Version 0 (wenn es jemals eine Version 1 gegeben hätte, wäre sie mit Version 0 inkompatibel, daher die Änderung der Versionsnummer). Einige dieser Bibliotheken hat sowieso jeder, weil sie sich seit vielen Jahren nicht geändert haben. Nur Erfahrung oder ein Vergleich mehrerer Distributionen und mehrerer Versionen können Ihnen das sagen. Benutzer anderer Distributionen können dieselbe Binärdatei ausführen, wenn sie kompatible Versionen der Bibliotheken haben.