Problém s linkovaním .so
Ferdinand Prantl
Ferdinand.Prantl na ff.cuni.cz
Pondělí Leden 24 10:39:34 CET 2000
On Fri, Jan 21, 2000 at 12:46:38PM +0100, Marek Antozi wrote:
> Dobrý deň.
>
> Trosšku programujem a program mám urobený tak, že používa mnou vytvorenú
> .so knižnicu.
> Túto knižnicu kompilujem a linkujem následovne:
> cc -fstrength-reduce -O3 -Wall -D__RELEASE -DNO_SEAL -fPIC -c hw_x.c -o
> lxwin.o
> cc -shared -fPIC -o bin/lxwin.so lxwin.o -L /usr/X11R6/lib -lX11 -lXext
> -lXxf86vm -lXxf86dga
> toto urobí niečo také:
> ldd lxwin.so
> libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2aab5000)
> libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x2ab59000)
> libc.so.6 => /lib/libc.so.6 (0x2ab65000)
> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)
>
> ciže všetky undefined symbols sú hľadané v systémových .so
>
> Lenže ja potrebujem niečo také že tieto veci budú prilinkované k mojej
> .so, čiže v podstate bude staticky zlinkovaná. Skúšal som niečo také:
>
> cc -fstrength-reduce -O3 -Wall -D__RELEASE -DNO_SEAL -fPIC -c hw_x.c -o
> lxwin.o
> cc -shared -fPIC -o bin/lxwin.so lxwin.o -L /usr/X11R6/lib
> /usr/X11R6/lib/libX11.a /usr/X11R6/lib/libXext.a
> /usr/X11R6/lib/libXxf86vm.a /usr/X11R6/lib/libXxf86dga.a
>
> Ale to mi program zatrúbi pri funkcii dlsym, undefined symbol :(
>
> Ako to spraviť aby .so používala externe nanajvýš tak libc.so.6 a
> /lib/ld-linux.so.2 ?
> Prosím pomožte mi ;)
Knihovny, ktere chcete mit linkovane staticky, uvedte na radku pro ld
ve verzich libxxx.a, ja jsem takhle chtel napr. curses:
gcc [...] -lncurses
nebo "natvrdo" (jednou mi to jinak neslo)
gcc [...] /usr/lib/libncurses.a
A jesti vas otravuji hlasky o unresolved externals, zkuste parametr
(pri linkovani -shared je to skoro nezbytnost ;-)
gcc [...] -expect_unresolved \*
zdravi
Ferda Prantl
--
"Jen ve svych snech jsme svobodni. Po zbytek zivota potrebujeme penize."
----------------------------------
Ferdinand Prantl
LVT FF UK
e-mail: prantl na ff.cuni.cz
www: http://www.ff.cuni.cz/~prantl
ICQ: 36302930
Další informace o konferenci Linux