Come creare una Libreria condivisa .so impostando il suo codice sorgente nell'applicazione Gambas

Da Gambas-it.org - Wikipedia.

Volendo scrivere una nostra libreria dinamica condivisa .so esterna, si suggerisce di impostare il suo codice sorgente all'interno stesso dell'applicazione Gambas che poi andrà ad utilizzare le risorse di quella nostra libreria esterna.

Per scrivere e salvare all'interno del codice Gambas il codice sorgente in C della libreria condivisa esterna, si utilizzerà il Metodo ".Save()" della Classe statica "File". Poiché all'interno del codice Gambas il codice sorgente in C della libreria condivisa esterna deve essere scritto come stringhe di caratteri, ogni riga del codice andrà inserita nel secondo argomento del Metodo "File.Save()" ovviamente fra due doppi apici " .

Affinché anche la creazione della libreria con il comando gcc sia molto elastica e consenta, una volta chiuso il sistema, di cancellare la nostra libreria, essa potrà essere creata preferibilmente nella cartella "/tmp": in tal modo infatti ogni file attinente alla libreria condivisa esterna verrà eliminato automaticamente alla chiusura del sistema.
La riga di comando con gcc, necessaria per la effettiva creazione della libreria esterna condivisa .so, sarà ovviamente lanciata mediante l'istruzione "Shell". Si avrà cura di porre alla fine della riga anche l'istruzione "Wait", per garantire la completa realizzazione della libreria esterna.


Mostriamo un esempio pratico:

' Dichiara la funzione contenuta nella libreria esterna condivisa ".so" che sarà generata:
Private Extern funzione(i As Integer) As Integer In "/tmp/libreria_esterna"


Public Sub Main()
 
' Va a creare la libreria dinamica condivisa .so:
  Creaso()

' Utilizza, infine, le funzioni contenute dalla libreria esterna .so:
  Print funzione(99)
 
End


Private Procedure Creaso()

' Imposta il codice sorgente, che sarà scritto in linguaggio C, della libreria esterna:
 File.Save("/tmp/libreria_esterna.c", "int funzione(int i) {\n\n" &
           "  int c;\n\n" &
           "  c = i * 100;\n\n" &
           "  return c;\n\n}")

' Con "Shell" usa il programma "gcc" con l'opzione "-shared" per creare la libreria esterna, e attende con "Wait" la completa realizzazione:
 Shell "gcc -o /tmp/libreria_esterna.so /tmp/libreria_esterna.c -shared" Wait

End

Va rilevato che in taluni particolari casi il programma "gcc" richiede l'uso anche dell'opzione "-fPIC".


Note