2009-07-10 6 views
0

Auf einer Produktions Linux-Box ohne Entwicklungs-Tools installiert ist (zB keine Header, kein gcc), wie Sie aus stellen, wenn es in der Lage sein wird, Sachen ausführen:Wie kann ich feststellen, ob ich für gcc4 kompilierte ausführbare Dateien auf einer Box ausführen kann?

  • unter gcc4.1.2 zusammengestellt, im Gegensatz zu gcc3 .3.3 (es gab eine Änderung in der ELF zwischen Version 3 und 4, glaube ich)
  • für 64-Bit kompiliert, im Gegensatz zu 32-Bit-Executables

wir haben einige Legacy-Bibliotheken haben, so dass wir noch gcc3.3.3 verwenden, sondern sind Umzug nach gcc4.1.2 und Kollege versuchte herauszufinden, wie man erkennt auf neue Remote-Box, wenn wir Zeug mit gcc4 kompiliert ausführen können.

Kann ich nach einer bestimmten Version von Bibliotheken oder ld-linux.so oder etwas ähnlichem suchen, anstatt die Test-App mit gcc4 zu kompilieren und dann zu versuchen, sie auf der neuen Box auszuführen?

Antwort

0

Es sieht so aus, als gäbe es keine einfache Möglichkeit, die Version einiger Bibliotheken zu betrachten, um festzustellen, ob gcc4-Binärdateien problemlos funktionieren.

Ich persönlich habe keine Probleme mit der Durchführung der in den anderen Antworten erwähnten Tests, aber ich suchte nach einer statischen Methode, um dies zu bestimmen, so dass jemand anderes in meinem Team die Linux Box überprüfen kann, ohne mir 30 Minuten zu geben Präsentation über wie Linux sollte funktionieren ...

2

Generierter Code sollte ordnungsgemäß ausgeführt werden. Sie können versuchen, ldd ausführen, da es den dynamischen Linker der Maschine verwendet, können Sie sehen, ob Bibliotheken fehlt.

+0

Ich versuche herauszufinden, ob die Box eingerichtet ist, Sachen mit gcc4 kompiliert auszuführen. Ich nehme an, Sie schlagen vor, app zu kompilieren, dann kopieren Sie es in die Remote-Box und dann ldd darauf ausführen. Das ist, was ich normalerweise tun würde, aber ich versuche herauszufinden, ob es einen anderen einfachen Weg gibt, indem ich einfach Bibliotheken anschaue oder einen Befehl oder etwas ähnliches tue. Aber danke für deinen Vorschlag. – stefanB

1

Ich denke, die Probleme, auf die Sie sich beziehen, sind mit GNU ld nicht gcc. Es wurde ein neuer Hash-Algorithmus für die Symbolsuche hinzugefügt. Sie sollten alles mit -Wl kompilieren, - hash-style = beide oder -Wl, - hash-style = sysv (der Standard) in gcc4, dann haben Sie keine Probleme. Aus dem Speicher Redhat war die einzige Distribution, die den Gnu-Hash-Stil standardmäßig aktiviert hat.

Wenn in der Tat, dass Ihr Problem ist, dann können Sie sagen, indem Sie:

objdump -t foo | grep ".hash"

Das ist leer, wenn kein sysv-Hash vorhanden ist.

Verwandte Themen