2007-02-20 Tworzenie Bibliotek Statycznych i Dzielonych

Wstęp

Notatki z tworzenia bibliotek dzielonych i statycznych.
Prawie całkowicie na podstawie książki : "Linux Programowanie w przykładach - Kurt Wall" .

Programy:

nm - wypisuje symbole znajdujące się w pliku
ar - tworzy, modyfikuje lub rozpakowuje archiwa. (Najczęściej do bibliotek statycznych).
ldd - wypisuje biblioteki dzielone których potrzebuje program do prawidłowego działania
ldconfig - określa łącza w czasie działania (run-time Linka) / znajduje biblioteki w systemie. ( z poleceniem "-p" wypisuje co Trzema ls.so w buforze). | zmienna systemowa $LD_PRELOAD to lista oddzielonych spacjami bibliotek ładowanych przed wszystkimi innymi. (Użyteczne gdy mamy w systemie jedna bibliotekę a dla programu chcemy użyć innej).

Tworzenie biblioteki statycznej:

  1. tworzymy nagłówek bs.h i implementacje bs.c
  2. tworzymy plik obiektowy: gcc -c bs.c -o bs.o
  3. tworzymy archiwum z nim: ar rcs bs.a bs.o

Użycie:

  1. Tworzymy program prog.c co korzysta z tej biblioteki (plik nagłówkowy bs.h
  2. Kompilujemy program
    1. Dodajemy do ścieżki katalog z archiwum z bibliotekę bs.a dla naszych celów jest to obecny "." za pomocą : -L.
    2. Dodajemy bibliotekę statyczną za pomocą : -lbs
    3. W efekcie kompilujemy +/- taką komendą: gcc prog.c -o prog.bin -L. -lbs

Tworzenie biblioteki dzielone:

Przy tworzeniu bibliotek dzielonych trzeba pamiętać o kilku rzeczach:
NIE UŻYWAĆ : Używanie opcji -fomit-frame-pointer uniemożliwi debugowanie
UŻYWAĆ:

  • -fPIC tworzy kod niezależny od położenia (potrzebne gdyż biblioteka dzielona może zostać załadowana i dowiązana pod dowolnym adresem w przestrzeni adresowej aplikacji)
  • -shared dla kompilatora żeby skompilował bibliotekę jako dzieloną
  • -Wl,option przekazuje option do linkera jako opcje. Dzieli option względem przecinków "," (więc można wiele opcji podać na raz za pomocą przecinków).
  • -soname liblibraryname.so opcję ustawić dla linkera mówiącą mu jak się ma nazywać biblioteka dzielona. Jest to ważne bo biblioteka dzielona sl w wersji 6 będzie się nazywać : libsl.so podczas gdy plik się będzie nazywać libsl.so.6.0.0

Wiec do roboty:

  1. Tworzymy plik z programem "prog.c" korzystający z biblioteki…


koniec konców użyłem komned:

gcc -fPIC -shared -Wl,-soname,libcommunication.so communication.c -o libcommunication.so
g++ example_of_use_in_cpp.cpp -o example_of_use_in_cpp.bin -L. -lcommunication
gcc example_of_use_in_c.c -o example_of_use_in_c.bin -L. -lcommunication
LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
./example_of_use_in_c.bin
./example_of_use_in_cpp.bin
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License