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.