PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Statisches Kompilieren



detonation997
25-07-2003, 10:24
Ohne jetzt lange den Sinn zu hinterfragen :D

Wie kann ich z.B. "lame" statisch kompilieren, so dass er zur Ausführung keine Shared-Object files mehr braucht?

Anders ausgedrückt kann man auch sagen, dass "ldd" auf das lame-Binary keine Ausgabe haben darf.

Bis jetzt hab ich das ganze immer so kompiliert:


=============
./configure --prefix=/usr/local/lame-3.93.1
make && make install
=============

Dass ich damit mein Ziel verfehle weiß ich, nur wie komm ich hin?

Danke schon im Voraus,
Rainer

SeeksTheMoon
25-07-2003, 12:48
bei configure --help sollte sowas wie --enable-static stehen

detonation997
25-07-2003, 13:54
Das wars leider nicht. Ich denk, dass das mit einem Compiler-Flag oder einem Linker-Flag auch funktionieren muss. So ist das Ganze ja vom "configure"-Script abhängig.

mfg und trotzdem Danke!
Rainer

Berufspenner
25-07-2003, 14:14
Original geschrieben von detonation997
Das wars leider nicht. Ich denk, dass das mit einem Compiler-Flag oder einem Linker-Flag auch funktionieren muss. So ist das Ganze ja vom "configure"-Script abhängig.

mfg und trotzdem Danke!
Rainer Und was ist mit der static-Flag des gcc ?

Cu
André

detonation997
25-07-2003, 16:31
In welches Makefile muss ich das hineinschreiben, dass er es bei jedem Compilier-/Link-Vorgang verwendet?

Zuerst hab ichs in "config.status" eingefügt (in jeder Zeile, in der das Wort "flag" vorgekommen ist); dann hab ich "config.status" ausgeführt (ist ja ein Shell-Script). Er hats dann beim Kompilieren offensichtlich auch benutzt (in den meisten Zeilen ist es beim Kompiliervorgang gestanden), aber geändert hat sich am Ergebnis leider noch immer nichts...:confused:

Danke trotzdem!

mfg Rainer

dakjo
25-07-2003, 17:17
Also ich würd sagen ins makefile Makefile :)

anda_skoa
25-07-2003, 17:25
Es müsste reichen, vor dem ./configure Aufruf das Flags in der Umgebungsvariable CFLAGS zu positionieren.

Allerdings bin ich mir nicht sicher, ob das dem automake Framework gefällt, denn es macht ja trotzdem eine dynamische lib.

Wahrscheinlich müsste man für einen statische Lib etwas in den Makefile.am Dateien ändern, damit dann alle Schritte (Kompilieren, Linken, Installieren) wissen, dass es eine statische lib wird.

Ciao,
_

peschmae
25-07-2003, 18:54
damit ldd nichts ausgibt müsstest du ja alles bis runter zur libc statisch linken!

Meinst du das wirklich ernst?

MfG Peschmä

Berufspenner
25-07-2003, 18:58
Hi@all

Kleine Frage: was soll das statische linken der Libs den bewirken bzw. welchen Vorteil soll das haben? Eine schnellere Laufzeit?

Cu
André

anda_skoa
25-07-2003, 21:22
Original geschrieben von Berufspenner
Kleine Frage: was soll das statische linken der Libs den bewirken bzw. welchen Vorteil soll das haben? Eine schnellere Laufzeit?


Es wir wahrscheinlich schneller starte, weil alle Symbole schon aufgelöst sind, aber bei einem kleine Programm macht das sicher nicht viel aus.

Sonst bringts eigentlich nix, außer dass man mehr Speicher verbaucht, weil ja das Sharing mit anderen Applikationen damit ausgeschaltet wird.

Ciao,
_

quinte17
28-07-2003, 06:38
es bringt schon noch was...

wenn ich ein minimalistisches linux habe, dem ich dann auch noch diverse libs runterwerfe, weil ich sie einfach nicht alle für 100 programme brauche... und weil ich dann auch keine gcc libs mehr drauf tun will... undundund....

dann kann ich dieses programm auch OHNE diese shared libs starten und benutzen... und spare mir dann unterm strich einige mb (in diesem fall wahrscheinlich für einen standalone linux mp3 playa)

mfg

anda_skoa
28-07-2003, 10:21
Ok, in einem auf einen Anwendungszweck festgelegten System hat man natürlich schon Vorteile.

Meine Aussage galt mehr einem normalen System, Desktop, Workstation oder Server.

Ciao,
_