Avviare con l'appoggio di una libreria esterna un semplice sorgente C senza compilarlo

Da Gambas-it.org - Wikipedia.
Versione del 16 mag 2014 alle 06:08 di Vuott (Discussione | contributi) (Creata pagina con 'E' possibile lanciare un semplice codice sorgente, scritto in linguaggio C e <SPAN style="text-decoration:underline">non</span> compilato, attraverso l'ausilio di un'apposita ...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

E' possibile lanciare un semplice codice sorgente, scritto in linguaggio C e non compilato, attraverso l'ausilio di un'apposita libreria esterna, la quale provvede ad invocare la routine main() del predetto sorgente.


Mostriamo un esempio pratico supponendo che il codice sorgente, che chiameremo sorgente_C.c, sia il seguente:

#include <stdio.h>


int i;

void main(int argc, char **argv) {

   while (1) {

     printf("%s-> %d\n", argv[0], i);
     sleep (1);
     i++;

   };

}


La libreria esterna, che chiameremo "libadhoc.c" e che dovrà lanciare il predetto codice sorgente C, avrà il solo compito di chiamare la routine main() del codice sorgente in C, e pertanto avrà il seguente tenore:

#include "percorso/del/file/sorgente/sorgente_C.c"


void LanciaCodice(char *s) {

  main(0, &s);

}

Questo codice della libreria esterna verrà posto nella cartella Dati del progetto Gambas.


Il codice dell'applicativo Gambas, invece, sarà il seguente:

Private Extern LanciaCodice(st As String) In "/tmp/libadhoc"


Public Sub Main()
 
' Generiamo la libreria esterna condivisa "libadhoc.so":
  Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait
 
' Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato:
  LanciaCodice("Testo qualsiasi")

End