Uwaga!
Strona na bieżąco zmieniana, ostatnia poprawka z dnia:
Friday, 15-Sep-2000 18:54:47 CEST

Używanie bibliotek

Etapy kompilacji

cpp
preprocesor: .c -> .i
cc1
kompilator: .i -> .s
as
asembler: .s -> .o
ld
linker: .o -> .out

Odczyt symboli

$ nm plik.o
$ objdump --syms plik.o
$ nm -s plik.a

Obsługa archiwum

$ ar x archiwum.a
wyciąga z archiwum wszystkie pliki .o
$ ar r archiwum.a *
dodaje do archiwum pliki<>
$ ar d archiwum.a plik
kasuje plik z archiwum

Linkowanie z bibliotekami dynamicznymi

$ ld -m elf_i386
wybór systemu
-Lkatalog_do_bibliotek
katalog z bibliotekami
-lbiblioteka_statyczna
libbiblioteka_statyczna.a lub biblioteka_statyczna
-dynamic_linker /lib/ld-linux.so.2
linker

Linkowanie statyczne

$ ld -static -lbiblioteka -Lkatalog_do_bibliotek

Tworzenie biblioteki ładowanej dynamicznie

$ gcc -shared plik.c -o plik.so
Można podać nazwę biblioteki:
$ gcc -shared plik.c -o libplik.so.1.1 -Wl,-soname,libplik.so.1

Linkowanie z biblioteką dynamiczną

$ gcc program.c plik.so
albo
$ gcc program.c -lplik -Lkatalog_z_bilioteka
Może okazać się konieczne uruchomienie programu ldconfig, lub stworzenie linka do pliku biblioteki:
$ ln -s libplik.so.1.1 libplik.so.1

Przykład

$ gcc -c druga.c funkcja.c
$ ar r libfunkcje.a druga.o funkcja.o
$ gcc -shared druga.o funkcja.o -o libfunkcje.so
$ gcc proba.c -L./ -lfunkcje

$ ldd a.out
libfunkcje.so => /lib/libfunkcje.so (0x40003000)
libc.so.6 => /lib/libc.so.6 (0x40005000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)

Plik Makefile

biblioteki = funkcje
moduly = funkcja.o druga.o
katalogi= ./
#$@ - oznacza cel, który się kompiluje, czyli "program"

program: lib
gcc proba.c -l$(biblioteki) -L$(katalogi) -o $@
clean:
rm *.o program
lib: $(moduly)
ar r libfunkcje.a $(moduly)
gcc -shared $(moduly) -o libfunkcje.so.1
test:
ldd program

© inż. Jacek Danecki
e-mail: biv@micronet.com.pl
Data utworzenia strony: 31 sierpnia 1999 r.
Registered Linux
user number 137044