Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

linken von statischen Bibliotheken

0 views
Skip to first unread message

Tobias Kretschmer

unread,
Sep 2, 2009, 10:22:03 AM9/2/09
to
Mir ist zu Ohren gekommen, da� man unter Linux nur die Bibliotheken der
Form "*.so" mit dem -l einbindet. Meine Frage w�re wie man statische
Libs einbindet mit ar und ranlib und wie die Syntax in gcc bzw. g++
daf�r aussieht.
(Fehlermeldung: undefined reference to ...)

W�re cool, wenn es jemanden gibt der da Bescheid wei�...
Danke...


MfG
Tobias Kretschmer

Tobias Kretschmer

unread,
Sep 2, 2009, 10:26:08 AM9/2/09
to

Rainer Weikusat

unread,
Sep 2, 2009, 10:34:18 AM9/2/09
to
Tobias Kretschmer <_unlea...@arcor.de> writes:
> Mir ist zu Ohren gekommen, da� man unter Linux nur die Bibliotheken der
> Form "*.so" mit dem -l einbindet.

Das ist jedenfalls falsch.

> Meine Frage w�re wie man statische
> Libs einbindet mit ar und ranlib und wie die Syntax in gcc bzw. g++
> daf�r aussieht.
> (Fehlermeldung: undefined reference to ...)

Dafuer muss es einen anderen Grund geben.

Reinhard Tchorz

unread,
Sep 2, 2009, 11:12:18 AM9/2/09
to
Hi,

> Mir ist zu Ohren gekommen, da� man unter Linux nur die Bibliotheken der
> Form "*.so" mit dem -l einbindet. Meine Frage w�re wie man statische
> Libs einbindet mit ar und ranlib und wie die Syntax in gcc bzw. g++
> daf�r aussieht.
> (Fehlermeldung: undefined reference to ...)

Guckst Du hier:
http://wiki.linuxquestions.org/wiki/Static_linking


Gru�
Reinhard

--
2.6.30-gentoo-r5 Xorg 1.5.3 KDE 4,3.0
Asus M2A-VM AMD Athlon X2 4450e Nvidia 7300LE

Markus Wichmann

unread,
Sep 2, 2009, 2:37:36 PM9/2/09
to
Tobias Kretschmer <_unlea...@arcor.de> wrote:
> Mir ist zu Ohren gekommen, daß man unter Linux nur die Bibliotheken der
> Form "*.so" mit dem -l einbindet. Meine Frage wäre wie man statische

> Libs einbindet mit ar und ranlib und wie die Syntax in gcc bzw. g++
> dafür aussieht.

> (Fehlermeldung: undefined reference to ...)
>
> Wäre cool, wenn es jemanden gibt der da Bescheid weiß...
> Danke...
>
>
> MfG
> Tobias Kretschmer

Da hast du ein paar Dinge durcheinandergeworfen.

Die Methode mit -l und -L ist nur eine spezielle Art, Eingabedateien zu
spezifizieren. Du könntest also z.B. schreiben:

gcc *.o /lib/libm.so

statt

gcc *.o -lm

Wenn du jetzt -l benutzt, dann kommt es auf die Einstellung des gcc
drauf an, welche Lib er benutzt: Standardmäßig sucht er dann nach Shared
Libs, indem er an den übergegebenen Namen vorne ein "lib" und hinten ein
".so" anfügt, um anschließend den Bibliothekssuchpfad durchzugehen, ob
es dort so eine Datei gibt.

Man kann aber auch als erstes Argument "-static" übergeben, wodurch er
nach statischen Libs suchen wird.

Wenn du also eine Statische Lib einbinden willst, dann geht das entweder
mit

gcc -static *.o -lNAME #evtl. noch -L, wenn die Lib nicht im Suchpfad
#liegt.

oder mit

gcc *.o /pfad/zu/libNAME.a

Soviel dazu.

ar und ranlib haben damit nix zu tun. Die sind dazu da, solche Libs zu
erstellen. Angenommen, alle *.o-Dateien des momentanen Verzeichnisses
sollen zu libNAME.a werden, geht entweder

ar r libNAME.a *.o
ranlib libNAME.a

oder

ar rs libNAME.a *.o

HTH,
Markus
--
GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"

0 new messages