6 - Biblioteci de Functii

download 6 - Biblioteci de Functii

of 22

  • date post

    13-Feb-2016
  • Category

    Documents

  • view

    232
  • download

    2

Embed Size (px)

description

biblioteci

Transcript of 6 - Biblioteci de Functii

Subprograme

Biblioteci de subprogrameBiblioteci de subprogrameBibliotec: colecie de subprograme, grupate ntr-un singur fiier (compilat)

ScopReutilizarea codului n mai multe aplicaiiDistribuirea ctre ali utilizatori

Tipuricod surs, cod binarstatice, dinamiceBiblioteciVariante de lucru

n mod comandcl.exe- compilatorlib.exe- manager de bibliotecilink.exe- editor de legturi

n mediul de programare (IDE) Visual Studion aceeai soluie (mai multe proiecte)n soluie independent

Biblioteci staticeCodul subprogramelor utilizate este inclus n executabil

ExtensieWindows: .libLinux: .a

AvantajeUn singur fiier executabilDin bibliotec se extrage doar codul subprogramelor apelate

DezavantajeDimensiune (mai) mare a fiierului executabilFiecare executabil va include propria copie a subprogramelor din bibliotecaEditare de legturiBiblioteci staticeFiiere cod surs(.c, .cpp, .h)Fiiere cod obiect(.obj)Biblioteci cod obiect(.lib)Fiiere cod surs(.c, .cpp, .h)Cod binar executabil(.exe)CompilareManager biblioteciBiblioteci cod obiect(.lib)Fiiere cod obiect(.obj)CompilareBiblioteci statice - exempluFiiere sursantet:matrice.himplementarematrice.cpp testtest.cpp

//alocare dinamica matrice// I - nr. linii, nr. coloane// E - adresa matriceidouble **aloca_matrice(int m, int n);

//dezalocare matrice dinamica// I - adresa matricei, nr. linii// E - adresa matricei (NULL)double** dezalocare_matrice(double **a, int m);

//produs matrice patrate de dimensiuni egale, prealocate// I - a, b, n// E - cvoid produs_mpn(double** a, double **b, int n, double** c);

//copiaza matrice prealocate// I - a, m, n// E - bvoid copiaza(double** a, int m, int n, double** b);

//citire matrice patrata cu alocare// I - // E - adresa matrice, dimensiunedouble** citire_matrice(int *m);

//afisare matrice patrata// I - adresa matrice, dimensiune// E - void afisare_matrice(double** a, int m);#include #include #include "matrice.h"

//citire matrice patrata cu alocare// I - // E - adresa matrice, dimensiunedouble** citire_matrice(int *m){ int i,j; double** a; printf_s("\n\nDimensiune: "); scanf_s("%d",m); a=new double*[*m]; for(i=0;i Configuration Properties > C/C++ > General > Additional Include Directories > calea ctre matrice.hProject > Set As StartUp ProjectSe compileaz soluia (Build)Se lanseaz n execuie din IDE sau separatTest.exe se afl n BSIDE\Debug

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

Biblioteci dinamiceCodul subprogramelor utilizate este separat de executabil

ExtensieWindows: .dllLinux: .so

AvantajeDimensiune (mai) mic a executabiluluiBiblioteca este utilizat n paralel de mai multe aplicaii

DezavantajeMai multe fiiere (executabil + biblioteci dinamice)Timp suplimentar la execuieAsigurarea accesului la bibliotec (calea curent, PATH)Editare de legturiBiblioteci dinamiceFiiere cod surs(.c, .cpp, .h)Fiiere cod obiect (.obj)Tabela de import (.lib)Biblioteci dinamice(.dll)Fiiere cod surs(.c, .cpp, .h)Cod binar executabil(.exe)CompilareEditare de legturiBiblioteci cod obiect(.lib)Fiiere cod obiect(.obj)CompilareCod binar executabil(.exe)Biblioteci dinamice(.dll)Biblioteci dinamiceCrearea i utilizarea este asemntoare cu a bibliotecilor staticeDifereneAntetul funciilor trebuie s conin (doar n .h)__declspec(dllexport)

La execuie, fiierul .dll trebuie s poat fi gsitBiblioteci dinamice - exemplun mod comandSe creeaz un director nou pentru proiect n care se salveaz cele 3 fiiereSe execut vcvars32.bat, aflat in subdirectorul bin al Visual StudioC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin

cl matrice.cpp /LDmatrice.dll, matrice.lib

cl test.cpp matrice.libtest.exe

Biblioteci dinamice - exemplun IDE creare bibliotec binarSe creeaz un proiect nou de tip Win32 Console Application numele soluiei: BDIDE, al proiectului: matrice

n fereastra Application settings se alege Application type: DLLAdditional 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 binarNumele bibliotecii: matrice.dll, matrice.lib

Biblioteci dinamice - exemplun IDE utilizare bibliotec binar n aceeai soluieSe 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 ApplicationAdditional options: Empty project, fr Precompiled headersSe adaug la proiect fiierul surs (cu funcia main)Project > Properties > Common Properties > Framework and References > Add New Reference > matriceProject > Properties > Configuration Properties > C/C++ > General > Additional Include Directories > calea ctre matrice.hProject > Set As StartUp ProjectSe compileaz soluia (Build)Se lanseaz n execuie

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

BiblioteciComparaie dimensiuni

Cnd folosim biblioteci?

Cnd folosim biblioteci statice / dinamice?

Static (.lib)Dinamic (.dll)L.C.IDEL.C.IDEmatrice.h989 B 989 B 1.165 B 1.165 B matrice.lib3.728 B14.766 B3.656 B3.656 Bmatrice.dll--82.432 B31.232 Btest.exe83.968 B31.232 B30.720 B33.280 B29.184 BBiblioteci de funciiTemCreai i testai o bibliotec format din funciile necesare prelucrrii vectorilorBibliotec staticLucrai n mod comandLucrai n IDEBibliotec dinamicLucrai n mod comandLucrai n IDETema va fi prezentat la nceputul probei practice i este condiie de intrare la proba practicBiblioteci de funcii - LinuxInstrumentegcccompilator Cg++compilator C++ldeditor de legturiBiblioteci staticeg++ -c matrice.cppfunctii.oar rcs libmatrice.a matrice.olibfunctii.ag++ -static main.cpp L./ -lmatrice o main.outmain.out./main.out

Biblioteci de funcii - LinuxBiblioteci dinamiceg++ -c -fPIC matrice.cppfunctii.og++ -shared -o libmatrice.so matrice.olibfunctii.sog++ main.cpp o main.out -L./ -lmatricemain.outsudo cp libmatrice.so /usr/lib./main.out

Spor la nvat!