PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : frage zum linker vom g++


Gast
2006-03-09, 16:15:18
hallo, ich möchte einige libraries statisch linken, andere dynamisch.

eine zeile wie diese:


g++ -static -lcrypt -shared -lc -o hallo hallo.o


Funktioniert nicht -> alles ist shared.

Folgende Zeile:

g++ -static -lcrypt -lc -o hallo hallo.o


Erzeugt eine komplett statisch gelinkte Binary.

Kann ich nicht irgendwie einige libs statisch linken, und andere nicht?

Gast
2006-03-09, 17:22:49
eine zeile wie diese:


g++ -static -lcrypt -shared -lc -o hallo hallo.o


Funktioniert nicht -> alles ist shared.

is klar dss das nicht klappt, da shared nach static steht und somit static aufhebt :|

Xmas
2006-03-09, 22:43:29
Ahem...
-shared: Produce a shared object which can then be linked with other objects to form an executable.
-shared hat gar keinen Einfluss darauf ob Bibliotheken statisch oder dynamisch gelinkt werden. -shared ist dazu da um Shared Libraries zu erzeugen.


g++ -l<shared lib> -static -l<static lib> -o hallo hallo.o

Gast
2006-03-17, 10:17:37
Keiner ne Idee, wie sich mein Problem lösen lässt?

Gast
2006-03-17, 10:31:09
ähm... nur mal ne ganz dumme Frage zum dynamischen Linken... sind dynamisch gelinkte Bibliotheken nicht dasselbe wie DLLs? Und die werden doch eigentlich gar nicht beim Linkervorgang eingebunden, sondern erst später zur Programmlaufzeit?

Gast
2006-03-17, 10:39:48
ähm... nur mal ne ganz dumme Frage zum dynamischen Linken... sind dynamisch gelinkte Bibliotheken nicht dasselbe wie DLLs? Und die werden doch eigentlich gar nicht beim Linkervorgang eingebunden, sondern erst später zur Programmlaufzeit?

DLL = Dynamic Link Library

Frage beantwortet? ;)

Trotzdem prüft der Compiler ob die entsprechende Funktion in der Bibliothek vorhanden ist.

zeckensack
2006-03-20, 14:22:22
Keiner ne Idee, wie sich mein Problem lösen lässt?Hier, ich.

Versuche:g++ -lc -static -lcrypt -o hallo hallo.oSollte das Ergebnis nicht deinen Wünschen entsprechen, lautet der Alternativplan so:g++ -static-libgcc -lcrypt -o hallo hallo.oDie Option -shared macht nicht was du möchtest. Tatsächlich existiert die Version die du möchtest gar nicht. Wie du hier (http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Link-Options.html#Link-Options) nachlesen kannst, gibt es keine Option die das Gegenstück zu -static bildet.

Du kannst dir evtl helfen indem du das Programm in zwei Etappen zusammenlinkst. Erstmal nur hallo.o mit der lcrypt zusammenlinken, und dann in einem zweiten Aufruf von GCC ohne die Option -static die libc dazu. Weiß nur nicht genau ob/wie man das anstellt, der Linker wird sich sicherlich über undefinierte Symbole beschweren. Evtl selber erstmal eine lib basteln :ulol:

Zur Abendlektüre:
ld --help

Coda
2006-03-20, 14:31:06
ld gehört ja gar nicht zum GCC, das macht die Sache manchmal noch vieeel lustiger ;)

zeckensack
2006-03-20, 14:34:45
ld gehört ja gar nicht zum GCC, das macht die Sache manchmal noch vieeel lustiger ;)Ich habe ld erwähnt, weil ich beim kurzen Hinschauen den Eindruck hatte dass ld das Problem lösen können müsste.
GCC alleine kann's einfach nicht, das steht für mich in Anbetracht der Dokumentation fest.

Coda
2006-03-20, 15:06:44
Ja, es gab nur schon Bugs in ld die dann zu Inkompatibilitäten geführt haben. Ich konnts anfangs gar nicht glauben, dass ld gar nicht zu GCC sondern zu den binutils gehört.