Nisi pomenuo da li zelis da kreirs staticku (static) ili deljenju (shared) biblioteku (library). Pokusacu da u kratkim crtama objasnim kako da kreiras obe biblioteke.
Biblioteka je skup nekoliko objektnih fajlova, koja se moze koristiti kao jedan fajl u procesu linkovanja sa tvojim programom. Posto je biblioteka indeksirana mnogo je lakse koristiti nju pri linkovanju nego koristiti objektne fajlove. No, dosta o teoriji (ovo moze da ide u nedogled

, predjimo na konkretne stvari.
Staticka biblioteka predstavlja skup objektnih fajlova koji 'zakrpljeni' koristeci program za arhiviranje
ar. Kao primer uzecemo dva programa linux.c i kernel.c, gde je u programu linux.c napisana neka funkcija int linus(char *text), a u kernel.c funkcija int alan(char letter). Takodje ove dve funkcije su definisane u nekom zaglavlju pingvin.h (sadrzi samo dve linije koje sam gore napisao). Prva stvar koja je potrebna uraditi je kompajlirati program linux.c i kernel.c kao objektne fajlove (na primer gcc -c linux.c kernel.c). Tako ces dobiti dva fajla linux.o i kernel.o. Potom je potrebno arhivirati ova dva objektna fajl koristeci ar komandu i to ar crv liboops.a linux.o kernel.o. Gde je liboops.a ime biblioteke koju si kreirao. I na kraju da bi indeksirao biblioteku (iako na nekim sistemima ar to sam radi, ali ipak od viska glava ne boli

pokreni komandu
ranlib liboops.a. I tvoja staticka biblioteka je spreman za koriscenje. Ako zelis da napravis neki probni program potrebno je da uneses zaglavlje pingvin.h i iz tvog programa (recimo program.c) pozoves funkciju
linus sa nekim argumentom. Potom da bi iskompajlirao samo ukucas gcc -c program.c && gcc -o program program.c -L. -loops (sigurno znas da sa prekidacem -l pozivas biblioteku, pa da ne ulazim u pricu o tome).
Ipak, staticka biblioteka ima jedan veliki problem. Zamisli da radis na nekoj 386ici gde imas 4MB memorije RAMa i sa nekih 20MB prostora na disku. Ako u isto vreme pozoves nekoliko programa koji koriste funkciju iz iste biblioteke, zavrsices sa velikim brojem kopija iste funkcije, sto znaci da ces izgubiti dragoceni sto memorijski prostor sto prostor na disku. But don't be afraid, Captain Shared is comming to rescue you. Metoda kreiranja deljene biblioteke je ista, ali ipak pri kompajliranju izvornog koda postoji nekoliko smicalica koje moraju da se ubace. Prvo pri generisanju objektnog koda potrebno je da pozoves prekidac
-fPIC (pogledaj njegovo znacenje u man i info stranam, da ne bi produzavao ovu diskusiju u nedogled

. To znaci da nase programcice linux.c i kernel.c prevodimo na sledeci nacin: gcc -fPIC -c kernel.c && gcc -fPIC -c linux.c. Posto deljenja biblioteka ne predstavlja arhivu potrebo je da je generises pomocu
shared prekidaca, drugim recima: gcc -shared liboops.so linux.o kernel.o. I voila, to je to. Sada je samo potrebno da svoje programce linkujes: gcc -c program.c && gcc -o program program.o -L. -loops. Takodje potrebno je da svoj direktorijum postavis u fajl /etc/ld.so.conf ili da direktoriju gde se nalazi biblioteka liboops.so postavis u varijabli LD_LIBRARY_PATH da bi ga program nasao prilikom startovanja.
Ukoliko naidjes na neke probleme posalji problem, pa da to resimo. Nadam se da ti je ovaj nazovimo 'mini' tutorial pomogao u kreiranju biblioteka.