Linguaggio di programmazione C

Indice

  1. Shared library
  2. Esempio pratico

Shared library

Una shared library (o tradotto letteralmente libreria condivisa), è una particolare libreria che viene caricata dinamicamente da un applicativo. Quindi, il codice della libreria non è incluso nell'applicativo stesso, rendendo quest'ultimo più piccolo in dimensioni, di conseguenza occupando meno memoria.

Scrivere una libreria non è diverso rispetto ad un programma, l'unica differenza &grave quest'ultimo avrà un punto di accesso, ovvero la funzione main().

Esempio pratico

Creare l'implementazione della libreria:

planets.c

#include <stdio.h>

void
hello_from(int planet)
{
    switch (planet) {
        case 1:
            printf("Ciao da Mercurio!\n");
            break;
        case 2:
            printf("Ciao da Venere!\n");
            break;
        case 3:
            printf("Ciao dalla Terra!\n");
            break;
        case 4:
            printf("Ciao da Marte!\n");
            break;
        case 5:
            printf("Ciao da Giove!\n");
            break;
        case 6:
            printf("Ciao da Saturno!\n");
            break;
        case 7:
            printf("Ciao da Nettuno!\n");
            break;
        case 8:
            printf("Ciao da Urano!\n");
            break;
        case 9:
            printf("Ciao da Plutone!\n");
            break;
        deafault:
            printf("Ciao dallo spazio profondo!\n");
            break;
    }
}

Bisogna creare un file header che verrà utilizzato negli applicativi:

planets.h

#ifndef __PLANETS_H__
#define __PLANETS_H__

#define MERCURIO 1
#define VENERE   2
#define TERRA    3
#define MARTE    4
#define GIOVE    5
#define SATURNO  6
#define NETTUNO  7
#define URANO    8
#define PLUTONE  9

/* la funzione va dichiarata extern in modo da poterla usare in applicativi esterni */
extern void hello_from(int);

#endif

Per compilare la libreria basta dare il seguente comando:

$ cc -fPIC -c planets.c

Si otterrà quindi il file planets.o.

Successivamente eseguire il seguente comando per ottenre la shared library:

$ cc -shared planets.o -o libplanets.so

Da notare che il file di output ha come prefisso lib, è necessario affinché il sistema operativo riesca a trovare la libreria.

I parametri usati durante la compilazione:

A questo punto, creare un file main.c che richiamerà la funzione della libreria:

main.c

#include <stdio.h>
#include "planets.h"

int main(void)
{
  hello_from(TERRA);
  return 0;
}

Per compilare l'applicativo, bisogna specificare al linker quale libreria usare:

$ cc -L./ main.c -o planets -lplanets

Attenzione, la libreria dev'essere messa nelle directory di sistema. Altrimenti se si vuole distribuire il binario dell'applicativo con la libreria, basta eseguire questo comando:

$ cc -L./ -Wl,-rpath=./ main.c -o planets -lplanets