Sunteți pe pagina 1din 22

Biblioteci de subprograme

Biblioteci de subprograme
Bibliotec: colecie de subprograme, grupate ntrun singur fiier (compilat) Scop
Reutilizarea codului n mai multe aplicaii Distribuirea ctre ali utilizatori

Tipuri
cod surs, cod binar statice, dinamice

Biblioteci
Variante de lucru
n mod comand cl.exe - compilator lib.exe - manager de biblioteci link.exe - editor de legturi n mediul de programare (IDE) Visual Studio n aceeai soluie (mai multe proiecte) n soluie independent

Biblioteci statice
Codul subprogramelor utilizate este inclus n executabil

Extensie
Windows: Linux: .lib .a

Avantaje
Un singur fiier executabil Din bibliotec se extrage doar codul subprogramelor apelate

Dezavantaje
Dimensiune (mai) mare a fiierului executabil Fiecare executabil va include propria copie a subprogramelor din biblioteca

Biblioteci statice
Fiiere cod surs (.c, .cpp, .h) Compilare Fiiere cod obiect (.obj)
Manager biblioteci

Biblioteci cod obiect (.lib)

Fiiere cod surs (.c, .cpp, .h)

Compilare

Fiiere cod obiect (.obj)


Editare de legturi

Cod binar executabil (.exe)

Biblioteci cod obiect (.lib)

Biblioteci statice - exemplu


#include <stdio.h> #include <malloc.h> //alocare dinamica matrice #include // I - "matrice.h" nr. linii, nr. coloane //citire matrice patrata cu alocare double **aloca_matrice(int m, int n); // I // E - adresa matrice, dimensiune //dezalocare matrice dinamica double** citire_matrice(int *m) - adresa matricei, nr. linii { // int I i,j; // E - adresa matricei (NULL) double** a; double** dezalocare_matrice(double **a, int m); printf_s("\n\nDimensiune: "); scanf_s("%d",m); a=new double*[*m]; //produs matrice patrate de dimensiuni egale, prealocate #include <stdio.h> for(i=0;i<*m;i++) // I a, b, n #include <conio.h> a[i]=new double[*m]; // E c #include "matrice.h" for(i=0;i<*m;i++) void produs_mpn(double** a, double **b, int n, double** c); for(j=0;j<*m;j++) void main() { printf_s("a[%d,%d]= ",i,j); { //copiaza double** a;matrice prealocate scanf_s("%lf",&a[i][j]); int m,n; // I - a, m, } n // E - a; b return void copiaza(double** a, int m, int n, double** b); } a=citire_matrice(&m); afisare_matrice(a,m);

- adresa matricei // EFiiere surs

antet: implementare test

matrice.h matrice.cpp test.cpp

//afisare matrice patrata //citire matrice patrata cu alocare //_getch(); I adresa matrice, dimensiune // I } //// E E - adresa matrice, dimensiune void afisare_matrice(double** a, int m) double** citire_matrice(int *m); { int i,j; //cout<<"\nMatricea este: \n"; //afisare matrice patrata for(i=0;i<m;i++) // I - adresa matrice, dimensiune { for(j=0;j<m;j++) // E printf_s("%10.6lf ",a[i][j]); void afisare_matrice(double** a, int m); printf_s("\n"); } printf_s("\n"); }

Biblioteci statice - exemplu


n mod comand
Se creeaz un director nou pentru proiect n care se salveaz cele 3 fiiere Se execut vcvars32.bat, aflat in subdirectorul bin al Visual Studio
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin cl -c matrice.cpp matrice.obj lib matrice.obj /out:matrice.lib matrice.lib cl test.cpp matrice.lib test.exe

Biblioteci statice - exemplu


n IDE creare bibliotec binar
Se creeaz un proiect nou de tip Win32 Console Application numele soluiei: BSIDE, al proiectului: matrice n fereastra Application settings se alege Application type: Static library Additional options: Empty project, fr Precompiled headers Se adaug la proiect fiierele surs (antet i implementare)

Se compileaz soluia (Build)


n directorul BSIDE\Debug se va genera biblioteca binar Numele bibliotecii: matrice.lib

Biblioteci statice - exemplu


n IDE utilizare bibliotec binar n aceeai soluie
Se creeaz un proiect nou de tip Win32 Console Application numele proiectului: Test, se adaug la soluia matrice n fereastra Application settings se alege Application type: Console Application Additional options: Empty project, fr Precompiled headers Se adaug la proiect fiierul surs (cu funcia main) Project > Properties > Common Properties > Framework and References > Add New Reference > matrice Project > Properties > Configuration Properties > C/C++ > General > Additional Include Directories > calea ctre matrice.h Project > Set As StartUp Project Se compileaz soluia (Build) Se lanseaz n execuie din IDE sau separat Test.exe se afl n BSIDE\Debug

Biblioteci statice - exemplu


n IDE utilizare bibliotec binar n alt soluie
Se creeaz un proiect nou de tip Win32 Console Application numele soluiei (i al proiectului): TestS n fereastra Application settings se alege Application type: Console Application Additional options: Empty project, fr Precompiled headers Se adaug la proiect fiierul surs (cu funcia main) Se copiaz n directorul proiectului fiierele matrice.h i matrice.lib Project > Properties > Configuration Properties > Linker > Input > Additional Dependencies > se adaug matrice.lib Se compileaz soluia (Build) Se lanseaz n execuie

Biblioteci dinamice
Codul subprogramelor utilizate este separat de executabil

Extensie
Windows: Linux: .dll .so

Avantaje
Dimensiune (mai) mic a executabilului Biblioteca este utilizat n paralel de mai multe aplicaii

Dezavantaje
Mai multe fiiere (executabil + biblioteci dinamice) Timp suplimentar la execuie Asigurarea accesului la bibliotec (calea curent, PATH)

Biblioteci dinamice
Fiiere cod surs (.c, .cpp, .h) Compilare Fiiere cod obiect (.obj) Tabela de import (.lib)
Editare de legturi

Biblioteci dinamice (.dll)

Fiiere cod surs (.c, .cpp, .h)

Compilare

Fiiere cod obiect (.obj)


Editare de legturi

Biblioteci dinamice (.dll)

Cod binar executabil (.exe)

Biblioteci cod obiect (.lib)

Cod binar executabil (.exe)

Biblioteci dinamice
Crearea i utilizarea este asemntoare cu a bibliotecilor statice Diferene
Antetul funciilor trebuie s conin (doar n .h) __declspec(dllexport) La execuie, fiierul .dll trebuie s poat fi gsit

Biblioteci dinamice - exemplu


n mod comand
Se creeaz un director nou pentru proiect n care se salveaz cele 3 fiiere Se execut vcvars32.bat, aflat in subdirectorul bin al Visual Studio
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin cl matrice.cpp /LD matrice.dll, matrice.lib cl test.cpp matrice.lib test.exe

Biblioteci dinamice - exemplu


n IDE creare bibliotec binar
Se creeaz un proiect nou de tip Win32 Console Application numele soluiei: BDIDE, al proiectului: matrice n fereastra Application settings se alege Application type: DLL Additional options: Empty project Se adaug la proiect fiierele surs (antet i implementare)

Se compileaz soluia (Build)


n directorul matrice\matrice\Debug se va genera biblioteca binar Numele bibliotecii: matrice.dll, matrice.lib

Biblioteci dinamice - exemplu


n IDE utilizare bibliotec binar n aceeai soluie
Se creeaz un proiect nou de tip Win32 Console Application numele proiectului: Test, se adaug la soluia matrice n fereastra Application settings se alege Application type: Console Application Additional options: Empty project, fr Precompiled headers Se adaug la proiect fiierul surs (cu funcia main) Project > Properties > Common Properties > Framework and References > Add New Reference > matrice Project > Properties > Configuration Properties > C/C++ > General > Additional Include Directories > calea ctre matrice.h Project > Set As StartUp Project Se compileaz soluia (Build) Se lanseaz n execuie

Biblioteci dinamice - exemplu


n IDE utilizare bibliotec binar n alt soluie
Se creeaz un proiect nou de tip Win32 Console Application numele soluiei (i al proiectului): TestD Se copiaz n directorul proiectului fiierele matrice.h i matrice.lib n fereastra Application settings se alege Application type: Console Application Additional options: Empty project, fr Precompiled headers Se adaug la proiect fiierul surs (cu funcia main) Project > Properties > Configuration Properties > Linker > Input > Additional Dependencies > se adaug matrice.lib Project > Properties > Configuration Properties > Debugging > Environment > se adaug calea ctre matrice.dll Se compileaz soluia (Build) Se lanseaz n execuie

Biblioteci
Comparaie dimensiuni
Static (.lib) L.C.
matrice.h matrice.lib matrice.dll test.exe

Dinamic (.dll) L.C. 1.165 B 3.656 B 82.432 B 33.280 B IDE 1.165 B 3.656 B 31.232 B 29.184 B 989 B

IDE 14.766 B 31.232 B 30.720 B

989 B 3.728 B 83.968 B

Cnd folosim biblioteci?


Cnd folosim biblioteci statice / dinamice?

Biblioteci de funcii
Tem
Creai i testai o bibliotec format din funciile necesare prelucrrii vectorilor Bibliotec static
Lucrai n mod comand Lucrai n IDE

Bibliotec dinamic
Lucrai n mod comand Lucrai n IDE

Tema va fi prezentat la nceputul probei practice i este condiie de intrare la proba practic

Biblioteci de funcii - Linux


Instrumente
gcc g++ ld compilator C compilator C++ editor de legturi

Biblioteci statice
g++ -c matrice.cpp
functii.o ar rcs libmatrice.a matrice.o libfunctii.a g++ -static main.cpp L./ -lmatrice o main.out main.out ./main.out

Biblioteci de funcii - Linux


Biblioteci dinamice
g++ -c -fPIC matrice.cpp
functii.o g++ -shared -o libmatrice.so matrice.o libfunctii.so g++ main.cpp o main.out -L./ -lmatrice main.out sudo cp libmatrice.so /usr/lib ./main.out

Spor la nvat!