2009-06-11 16 views
16

In Linux, lud eine Programmquelle herunter und wollte, dass sie statisch verlinkt ist. haben einen großen Makefile gibt, ichWie man ein komplexes Programm statisch verbindet

./configure 
make 

zu kompilieren. Prehpes ist es ein bisschen zu allgemein zu fragen, aber wie kann ich die binäre statisch verknüpft machen? Danke.

EDIT: Der Grund dafür ist wollen sicherstellen, dass die Binärdatei keine Abhängigkeiten (oder zumindest so wenige wie möglich) haben, so dass es auf jedem Linux-basierten Computer, auch ohne Internetverbindung, laufen kann nicht aktualisiertes Linux.

+1

Statische Verknüpfung gilt als schädlich! http://people.redhat.com/drepper/no_static_linking.html Es tut mir leid, das ist keine direkte Antwort auf Ihre Frage, aber ich wollte nur darauf hinweisen. –

Antwort

25

meisten autoconfconfigure generierte Skript ermöglicht es Ihnen, eine statische Aufladung zu machen:

./configure --enable-static 
make 

Wenn das nicht funktioniert, können Sie in der Lage sein, Linker-Flags in wie diese über LDFLAGS, weitergeben müssen:

./configure LDFLAGS=-static 
+0

Sehr gute Antwort, leider haben beide aus irgendeinem Grund nicht funktioniert. –

+0

Von dem, was ich verstehe, hat es nicht funktioniert, weil mir die statischen Bibliotheken fehlten, mit denen ich mich verbinden konnte. –

+2

Auf CentOS müssen die Pakete, die Sie für die statische Verknüpfung installieren müssen, 'glibc-static' für c und' libstdC++ - static' für die statische C++ - Verknüpfung sein. Siehe [diesen Beitrag für weitere Informationen] (https://www.systutorials.com/5217/how-to-statical-link-c-and-c-programs-on-linux-with-gcc/) –

5

Ja, Sie müssen die make-Datei bearbeiten und den GST -Static-Parameter während des Links hinzufügen.

1

Ich nehme an, es verwendet GCC, um eine Reihe von C-Programmen zu kompilieren, obwohl Sie im Makefile suchen müssen, um herauszufinden.

Wenn dies der Fall ist, können Sie die gcc-Zeilen im Makefile anpassen, um statische Verknüpfungen zu erstellen, obwohl dies je nach Struktur des Programms eine komplexe Änderung sein kann. Werfen Sie einen Blick auf Mann gcc, um zu sehen, wie das gemacht wird.

Ich würde gerne wissen, warum Sie statisch verknüpfen. Haben Sie in Betracht gezogen, stattdessen eine Vorverknüpfung zu verwenden?

Sie sollten beachten, dass es Lizenzprobleme geben kann, wenn alle Komponenten nicht GPL sind.

2

Wenn Sie eine statische Binärdatei nicht kompilieren können, hatte ich gute Ergebnisse mit Statifier.

+0

Ausgezeichnete Idee. Ich hatte sehr gute Ergebnisse mit einem ähnlichen Produkt. –

Verwandte Themen