Der Titel sagt eigentlich alles. Aber gestatten Sie mir, die Frage zu präzisieren:
Angenommen, ich würde eine Anwendung kompilieren, die libffi, libGL, dlfcn und SDL verwendet, würde diese Binärdatei auf anderen Linux-Distributionen mit derselben Architektur usw. laufen?
Der Grund, warum ich frage, ist wegen des Verzeichnisses /usr/lib/i386-linux-gnu
– Ich könnte mich irren, aber ich nehme an, dass dieses Verzeichnis eher Ubuntu-spezifisch ist, oder?
Also, wie portabel sind Binärdateien, die auf Ubuntu kompiliert wurden, wirklich?
Akzeptierte Antwort:
Wenn Sie eine Binärdatei kompilieren, sagen Sie nginx
Aus dem Quellcode enthält es Informationen darüber, welche Versionen der Bibliotheken sich auf dem System befinden, das die Binärdateien kompiliert. Die zu referenzierenden Bibliotheken werden natürlich durch die Argumente bestimmt (für nginx
, das ist die Definition, welche Module aktiviert werden sollen oder nicht). Aber die von Ihnen erstellte Binärdatei wird (unwahrscheinlich) auf einem separaten System ausgeführt, es sei denn, es handelt sich um ein identisch konfiguriertes System.
Sie werden die Anwendung auf jedem einzelnen System kompilieren wollen, es ist (relativ) unwahrscheinlich, dass Sie die kompilierte Version auf ein anderes System portieren können, das vielleicht nicht über eine kompatible Version jeder Bibliothek verfügen.
Hinweis:Solange Sie können Holen Sie sich eine Binärdatei, um sie auf ein anderes Linux-System zu portieren, es ist nicht ratsam und normalerweise zeitaufwändig. Dies liegt daran, dass:
(1) Sie sicherstellen müssen, dass das System, auf das Sie Ihre Binärdatei verschieben werden, dieselbe Version von libc
verwendet die zum Kompilieren der Binärdateien verwendet wurde
(2) Sie müssen sicherstellen, dass die innerhalb des Programms verwendeten Bibliotheken auf Ihrem System leicht erkannt werden können und dass es sich um dieselben (oder kompatiblen) Versionen wie verwendet handelt um das Programm zu erstellen.
…und natürlich andere zu berücksichtigende Variablen. Es ist auf lange Sicht einfach einfacher, das Programm auf jedem System zu kompilieren, um es zu verwenden, anstatt zu versuchen, Portabilität anzustreben.