Gibt es Idiosynkrasien oder Variationen zwischen Distributionen, die C ++ - Binärdateien betreffen, die mit GCC 4.7.x auf einer Distribution kompiliert wurden, die direkt auf einer anderen Distribution verwendet wird? Ich verstehe, dass die ideale Situation ist, aus der Quelle auf der zweiten Distribution zu kompilieren, aber ich möchte wirklich keine Sorgen darüber machen, neue GCC-Versionen und den Quellcode des Programms auf meiner Produktionsmaschine zu kompilieren. Ich bin ein relativ unerfahrener Linux-Benutzer (daher die Frage!) Und bevorzuge weiterhin IDEs im Gegensatz zur Befehlszeilen-Kompilierung, wobei ssh alles ist, was ich wirklich verwenden kann, um auf die Produktionsmaschine zuzugreifen.
Der Code selbst ist nichts Interessantes, aber er nutzt einige Funktionen des Betriebssystems wie Blocking Sockets und ähnliches.
Jeder Rat würde sehr geschätzt werden!
Wenn die Binärdateien nicht auf genau demselben Betriebssystem (einschließlich Version) und genau derselben Hardware basieren, gibt es keine Garantien.
In der Praxis:
Wenn die Hardware dieselbe Chipfamilie ist, sollte es funktionieren.
Wenn das Betriebssystem dieselbe Major-Nummer hat, sollte es (wahrscheinlich) funktionieren.
Mein Rat aus der Quelle aufbauen.
README
. In der Regel werden jedoch die beiden Befehle ./configure
und make
ausgeführt. Wenn Sie nichts Besonderes möchten, brauchen Sie normalerweise nichts anderes zu tun. G ++ hatte schon lange eine stabile ABI, das sollte keine Probleme verursachen. Was wahrscheinlich Probleme verursacht, ist die Verwendung dynamisch verknüpfter Bibliotheken. Das System, auf dem das Programm ausgeführt wird, muss kompatible Versionen aller gemeinsam genutzten Bibliotheken haben, für die die ausführbare Datei kompiliert wurde. Wenn Sie nur statische Verknüpfungen verwenden, sollten Sie kein Problem haben. Sie können die statische Verknüpfung mithilfe der Option -static
aktivieren.
Bei statischer Verknüpfung müssen zwei Bedingungen erfüllt sein:
1) Das Zielsystem und das Build-System müssen dieselbe Architektur haben (mit Ausnahmen: Sie können 32-Bit-Binärdateien auf vielen 64-Bit-Hosts ausführen)
2) Das (g) libc-Paket auf dem Zielsystem darf keine ältere Version sein als auf dem Build-System (Sie können manchmal kleinere Versionsunterschiede durchmachen)
Es wird komplizierter mit dynamischer Verknüpfung.
Im Allgemeinen funktionieren Binärdateien, die auf neueren Distributionen basieren, nicht mit älteren Versionen, aber Binärdateien, die auf älteren Distributionen basieren, funktionieren mit neueren Distributionen. Für den Fall, dass Sie eine Binärdatei auf RedHat EL4 erstellen, würde dies auf den meisten unterstützten Distributionen funktionieren (möglicherweise müssen Sie libstdc ++ kopieren, wenn sie fehlen)