fisica:informatica:201516:primoanno:esercitazione11
Esercitazione compilazione separata e librerie
Esercizio 1: Libreria operazioni su vettori
Realizzare una libreria che fornisce alcune operazioni comuni su vettori:
/** stampa a sullo standard output */ void print_v (double* a, int n); /** calcola c = a + b ; n da il numero di elementi dei tre vettori */ void sum_v (double* a, double* b, double* c, int n); /** calcola il prodotto vettoriale a[0]*b[0] + ...... a[n-1]*b[n-1] e lo restituisce come valore */ double innerprod_v (double* a, double* b, int n); /** calcola il massimo valore e lo restituisce l'indice del massimo viene scritto nella variabile di indirizzo m_i */ double max_v(double* a, int n, int* m_i); /** calcola il segmento di somma massima (vedi esercitazione del 25/03/2015) */ double ssm_v(double* a, int n, int* s_init, int* s_lung);
In C per realizzare una libreria si difinisce un file .h
con i prototipi ed i tipi messi a disposizione dalla libreria e si fornisce il codice pre-compilato in un opportuno file di libreria .a
.
Nel nostro caso l'header si chiamera' vect.h
e la libreria si chiamera' libVect.a
.
Procedere nel modo seguente:
- Definire un file
vect.h
che contiene i prototipi delle funzioni implementate (quelle nel riquadro sopra) - Definire un file
vect.c
che contiene il codice che implementa le funzioni. - Generare il modulo oggetto
vect.o
che contiene il codice precompilato delle funzioni, da inserire nella libreria. Il modulo oggetto puo' essere creato con il comandogcc
come segue
$ gcc -Wall -pedantic -c vect.c
- Creare la libreria con i lcomando
ar
come segue
$ ar -r libVect.a vect.o
Quando la creazione e' andata a buon fine per testarla creare un file main.c
che contenga delle chiamate alle funzioni di libreria, ad esempio:
#include "./vect.h" #define N 3 int main (void) { double a[N] = {3,4,5}, b[N] = {5, 1,7}, c[N]; sum_v(a,b,c,N); print_v(c,N); return 0; }
notate che :
- il main di test deve includere il file
vect.h
, questo permette al compilatore di controllare i tipi delle chiamate al codice della libreria - in fase di compilazione per collegare (linking) il codice del nel file
main.c
a quello della libreria bisogna usare le opzioni-l
e-L
$ gcc -Wall -pedantic main.c -lVect -L.
dove l'opzione -l
indica il nome della libreria (non standard) da usare in fase di linking e l'opzione -L
specifica la directory (non standard) dove cercarla (oltre alle directory standard tipo /usr/lib
).
fisica/informatica/201516/primoanno/esercitazione11.txt · Ultima modifica: 17/05/2016 alle 13:29 (9 anni fa) da Susanna Pelagatti