2013-04-27 11 views
7

Ich habe einige Code, den ich auf einer Maschine ausführen möchte, auf die ich keinen Root-Zugriff habe. Dieser Computer verfügt nicht über einige Bibliotheken, die zum Ausführen dieses Codes erforderlich sind.C - Kompilieren mit Abhängigkeiten enthalten

Gibt es eine Möglichkeit, alle Abhängigkeiten zu integrieren, wenn ich kompiliere? Ich verstehe, dass die resultierende Datei ziemlich groß sein kann.

Antwort

7

Was Sie suchen, ist statische Kompilierung. statische Kompilierung durchführen enthält in die ausführbare Datei selbst alle Bibliotheken, so müssen Sie nicht so viel über Abhängigkeitsketten auf einem bestimmten System, Verteilung usw.

Sie können dies mit Sorge:

gcc -Wl,-Bstatic -llib1 -llib2 file.c 

Die -Wl übergibt die folgenden Flags an den Linker, -Bastatic sagt ihm, wenn möglich, statisch zu verknüpfen, und dann lib1, lib2, sind die Bibliotheken, die Sie verknüpfen möchten.

Alternativ versuchen:

gcc -static-libgcc -static file.c 

Die Zusammenstellung muss dann noch die Architektur des nicht-privilegierten System anzupassen. Und Sie müssen die statischen Bibliotheken auf dem Compilieren System installiert haben (lib.a)

Wenn sie richtig kompiliert, sollte es zeigen „kein dynamisches ausführbares“, wenn Sie laufen:

ldd a.out 
+0

Dank. Ich werde bestätigen, nachdem ich es überprüft habe, aber ich denke, das ist genau das, wonach ich gesucht habe! – Hector

+0

Ok, jetzt bekomme ich das, was seltsam erscheint /usr/bin/ld: kann -lgcc_s nicht finden Alles, was ich hinzugefügt habe, ist, was Sie vorgeschlagen haben mit -openssl nach – Hector

+0

Fügen Sie diese Flags hinzu: '-static-libgcc' und' -static-libstdC++ '(bei Verwendung von C++) –