Differenze tra le versioni di "Creare una "Libreria condivisa" (Shared Library) .so"

Da Gambas-it.org - Wikipedia.
(Realizzazione pratica di una Libreria condivisa .so)
 
(41 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
===Introduzione===
+
#REDIRECT [[Come creare una Libreria condivisa (Shared Library) .so]]
In Gambas possono essere richiamate con la funzione ''Extern'' le cosiddette "''Librerie condivise''" (''Shared Library'') con estensione finale .so . Esse sono librerie esterne a Gambas, scritte in C o C++, che offrono potenzialità, funzionalità e risorse non disponibili eventualmente al momento con Gambas.
 
 
 
Le ''Librerie condivise'' sono delle librerie che vengono caricate dai programmi al loro avvio.
 
 
 
E' possibile creare da sé una ''Liberia condivisa .so'' ed utilizzarla con uno o più dei nostri programmi dei Gambas, richiamandola, come sappiamo, con la funzione "''Extern''". Per realizzare una ''Liberia condivisa .so'' sarà necessario avere dimistichezza ed adeguata conoscenza con il linguaggio C o con il C++.
 
 
 
 
 
==Elementi distintivi delle ''Librerie condivise''==
 
Riguardo alle ''Librerie condivise'' si distinguono tre tipi di nomi.
 
 
 
Il pprimo tipo di nome è chiamato "''soname''", costituito in ordine da:
 
* il prefisso <FONT color=#B22222>''lib''</font>;
 
* il <FONT color=#0000FF>nome</font> della libreria;
 
* l'estensione <FONT color=#B22222>''.so''</font>;
 
* un <FONT color=#0000FF>punto</font> e il <FONT color=#0000FF>numero della versione</font>.
 
 
 
 
 
Esempio: <FONT color=#B22222>lib</font><FONT color=#0000FF>nomequalsiasi</font><FONT color=#B22222>.so</font><FONT color=#0000FF>.0</font>
 
 
 
 
 
Il secondo tipo di nome è chiamato ''nome reale'', il quale non è altro che il file contenente il codice della libreria. Il ''nome reale'' della Liberia è costituito a sua volta in ordine da:
 
* il prefisso ''lib'';
 
* il nome della libreria;
 
* l'estensione ''.so'';
 
* un punto, un numero, poi un punto ed infine il numero del rilascio.
 
 
 
 
 
Vi è, infine, il nome che il compilatore usa, quando viene richiamata ed utilizzata una ''Liberia condivisa''. Tale nome non è altro il ''soname'' privo di qualsiasi numero di versione. Questo file è semplicemente un collegamento simbolico al ''soname'' più recente della Libreria. Se, dunque, per esempio il ''soname'' della ''Liberia condivisa'' è ''/usr/lib/libnomequalsiasi.so.1'' , il file con il nome del collegamento simbolico a tale ''soname'' sarà: /usr/lib/libnomequalsiasi.so .
 
 
 
 
 
Pertanto riassumendo in ipotesi avremo:
 
* '''''soname''''': libnomequalsiasi.so.1
 
* '''''nome reale''''': libnomequalsiasi.so.1.0
 
* '''''nome del collegamento simbolico''''': libnomequalsiasi.so
 
 
 
 
 
==Dove salvare le ''Librerie condivise .so''==
 
Gli standard GNU raccomandano di insatallare tutte le Librerie nella directory: ''/usr/local/lib''. Invece il ''Filesystem Hierarchy Standard'' (FHS) suggerisce di porre la maggior parte delle Librerie nella directory: ''/usr/lib'', e solo quelle che non appartengono al sistema andrebbero salvate nella directory: ''/usr/local/lib''.
 
 
 
Ad ogni modo, la ''Liberia condivisa .so'', da noi creata ed utilizzata dal nostro programma Gambas, potrà essere salvata in una qualsiasi directory, e da lì richiamata dal nostro programma.
 
 
 
 
 
==Realizzazione pratica di una ''Libreria condivisa .so''==
 
La creazione di una ''Libreria condivisa .so'' è semplice. Essa si articola sostanzialmente in quattro fasi, che vedremo nello specifico di seguito.
 
 
 
<B><FONT color=#0000FF>1<sup>a</sup> fase</font></b>
 
La prima fase prevede la creazione in C o C++ dei due file che contengono il codice della/le funzione/i che sarà/nno utilizzata/e dal nostro programma Gambas. Il primo file sarà un normale file, che qui a mo' di esempio chiameremo ''primo.c'', ed il secondo file sarà l'header del file precedente, e che chiameremo: ''primo.h'' .
 
 
 
Poniamo come esempio che il file ''primo.c'' sia semplicemente il seguente:
 
 
 
int fun(int a)
 
{
 
  return (a * 2);
 
}
 
ossia una funzione che riceve (da nostro programma Gambas chiamante) un intero, lo moltiplica per 2 e lo restiuisce alla funzione principale chiamante (cioè alla funzione della nostro programma Gambas).
 
 
 
Il relativo file header ''primo.h'' sarà dunque questo:
 
 
 
int fun(int);
 
 
 
 
 
<B><FONT color=#0000FF>2<sup>a</sup> fase</font></b>
 
La seconda fase prevede la creazione del (o dei) ''file oggetto'' che sarà inserito nella Libreria.
 
 
 
Si userà nel terminale la seguente linea di istruzioni:
 
 
 
gcc -fPIC -Wall -g -c primo.c
 
dalla quale si otterrà il file ''primo.o'' .
 
 
 
 
 
<B><FONT color=#0000FF>3<sup>a</sup> fase</font></b>
 
La terza fase prevede la creazione vera e propria della ''Libreria condivisa .so'' . La linea di istruzione nel terminale prevede, tra l'altro, l'indicazione del ''soname'', del ''nome-reale'' e del ''file oggetto'' creato nella 2<sup>a</sup> fase:
 
 
 
gcc -g -shared -Wl,-soname,libprimo.so.0 -o libprimo.so.0.0 primo.o -lc
 
 
 
 
 
 
 
<FONT color=#FF0000><B>- Pagina in costruzione -</b></font>
 

Versione attuale delle 20:13, 23 set 2022