Differenze tra le versioni di "Avviare con l'appoggio di una libreria esterna un semplice sorgente C senza compilarlo"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
E' possibile lanciare un codice sorgente <SPAN style="text-decoration:underline">semplice</span>, scritto in linguaggio C e <SPAN style="text-decoration:underline">non</span> compilato, attraverso l'ausilio di un'apposita libreria esterna, la quale provvede ad invocare la routine ''main()'' del predetto sorgente. | E' possibile lanciare un codice sorgente <SPAN style="text-decoration:underline">semplice</span>, scritto in linguaggio C e <SPAN style="text-decoration:underline">non</span> compilato, attraverso l'ausilio di un'apposita libreria esterna, la quale provvede ad invocare la routine ''main()'' del predetto sorgente. | ||
− | + | Mostriamo un esempio pratico, ove il codice dell'applicativo Gambas sarà il seguente: | |
− | Mostriamo un esempio pratico | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Private Extern LanciaCodice(st As String) In "/tmp/libadhoc" | Private Extern LanciaCodice(st As String) In "/tmp/libadhoc" | ||
Riga 40: | Riga 7: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Va a generare la libreria esterna condivisa "libadhoc.so":''</font> |
− | + | Creaso() | |
<FONT color=gray>' ''Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato:''</font> | <FONT color=gray>' ''Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato:''</font> | ||
− | + | LanciaCodice("Testo qualsiasi") | |
+ | |||
+ | '''End''' | ||
+ | |||
+ | '''Private''' Procedure Creaso() | ||
+ | |||
+ | <FONT color=gray>' ''La libreria esterna, che chiameremo "libadhoc.c" e che dovrà lanciare il codice sorgente C, avrà il solo compito di chiamare la routine "main()" del codice sorgente in C, e pertanto avrà il seguente tenore:''</font> | ||
+ | File.Save("/tmp/libadhoc.c", "#include \"<FONT color=gray>''/percorso/del/file/sorgente/sorgente_C.c''</font>"\n\n" & | ||
+ | "void LanciaCodice(char *s) {\n" & | ||
+ | " main(0, &s);\n}") | ||
+ | |||
+ | Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait | ||
'''End''' | '''End''' |
Versione delle 04:48, 8 dic 2021
E' possibile lanciare un codice sorgente semplice, 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, ove il codice dell'applicativo Gambas sarà il seguente:
Private Extern LanciaCodice(st As String) In "/tmp/libadhoc" Public Sub Main() ' Va a generare la libreria esterna condivisa "libadhoc.so": Creaso() ' Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato: LanciaCodice("Testo qualsiasi") End Private Procedure Creaso() ' La libreria esterna, che chiameremo "libadhoc.c" e che dovrà lanciare il codice sorgente C, avrà il solo compito di chiamare la routine "main()" del codice sorgente in C, e pertanto avrà il seguente tenore: File.Save("/tmp/libadhoc.c", "#include \"/percorso/del/file/sorgente/sorgente_C.c"\n\n" & "void LanciaCodice(char *s) {\n" & " main(0, &s);\n}") Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait End