24 februarie 2011

Compilari & Makefile-uri

Exemplu un Makefile care creeaza o biblioteca statica.

Intr-un director avem hexdump.c, hexdump.h, sample.c, main.c si vrem un Makefile astfel incat: la rularea comenzii make libhexdump_static să creeze biblioteca statică libhexdump_static.a (biblioteca va conține fișierele obiect asociate fișierelor hexdump.c și sample.c) si la rularea comenzii make să creeze executabilul main_static obținut din legarea fișierului obiect corespunzător lui main.c cu biblioteca libhexdump_static.a.

all: main_static

main_static: libhexdump_static
gcc -Wall main.c -o main_static -lhexdump_static -L.

libhexdump_static: hexdump.o sample.o
ar rc libhexdump_static.a hexdump.o sample.o

main.o: main.c

hexdump.o:
gcc -Wall -c hexdump.c
sample.o:
gcc -Wall -c sample.c

.PHONY:
clean:
rm -f *.o main_static libhexdump_static.a


Exemplu de Makefile care creeaza o biblioteca dinamica

Avand la dispozitie aceleasi fisiere, la rularea comenzii make libhexdump_dynamic să se creeze biblioteca dinamicălibhexdump_dynamic.so. Biblioteca va conține fișierele obiect asociate fișierelor hexdump.c și sample.c
La rularea comenzii make pe lângă executabilul main_dynamic obținut anterior să se creeze și executabilul main_dynamic obținut din legarea fișierului obiect corespunzător lui main.c cu biblioteca partajată libhexdump_dynamic.so.

all: main_dynamic

main_dynamic: libhexdump_dynamic.so
gcc -Wall main.c -o main_dynamic -lhexdump_dynamic -L.

libhexdump_dynamic: libhexdump_dynamic.so

libhexdump_dynamic.so:
gcc -shared hexdump.o sample.o -o libhexdump_dynamic.so

main.o: main.c
hexdump.o: hexdump.c
sample.o: sample.c

clean:
rm -f *.o main_dynamic libhexdump_dynamic.so

In consola trebuie setata o variabila de mediu: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
Pentru ca loader-ul (programul responsabil cu încărcarea programului în memorie) să știe unde să caute biblioteca partajată pentru a o încărca în memorie în cazul în care aceasta nu a fost încărcată deja.

Niciun comentariu: