[Desarrollo Gambas]
Creación de una libreria .so en C, y uso de la misma por el mismo programa que la crea.
El lenguaje C crea ejecutables mucho más eficientes y rápidos que los que crea el lenguaje Gambas... pero Gambas puede usar librería externas para aprovechar la eficiencia de C.
Este en un ejemplo subido por Vuott, donde, el propio programa de Gambas, crea una libreria .so y la usa.
Esto es lo que hace el programa
- Crea una libreria "libmuestra", en la carpeta /tmp, creando el archivo en C (libmuestra.c), y compilandolo como libreria shared , para que la cree como libmuestra.so.
- Esta libreria tiene la función potencia, que calcula la potencia dada de un numero X elevado a Y.
- En programa Gambas, la usa usando el comando Library y Private Extern Potencia()
- La función "potencia" es llamada por el programa para calcular la potencia de 3 elevado a 4.
Library "/tmp/libnuestra" ' Declara la libreria que contiene la función que nos interesa
' double Potencia(double x, int y)
' Devuelve la potencia de un valor de tipo "double"
' (es decir el tipo "Float" en gambas).
Private Extern Potencia(x As Float, y As Integer) As Float ' Declara la función que nos interesa
Public Sub Main()
Dim f As Float
' Llama a la procedura que crea la nuestra libreria .so:
Creaso()
' Utiliza la función externa de la nuestra libreria .so:
f = Potencia(3.0, 4.0)
Print f
End
Private Procedure Creaso()
' Crea el fichero fuente en C de la nuestra libreria .so:
File.Save("/tmp/libnuestra.c", "double Potencia(double x, int y) { /* Nam potentia activa est principium agendi in aliud. (S. Tomas) */" &
"\n\n" &
" if (y == 0)\n" &
" return 1;" &
"\n\n" &
" double pot = x;" &
" while (y > 1) {\n" &
" --y;" &
" pot *= x;\n}" &
"\n\n" &
" return pot;\n}")
' Crea la nuestra libreria .so:
Shell "gcc -o /tmp/libnuestra.so /tmp/libnuestra.c -shared" Wait
End
Descarga del ejemplo:
alojado en google drive
Fuente:
https://www.gambas-es.org/viewtopic.php?f=5&t=6011&p=35992&highlight=#p35992