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.chexdump.o: hexdump.csample.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:
Trimiteți un comentariu