Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



sábado, 10 de diciembre de 2016

[Desarrollo Gambas] Creación de una libreria .so en C, y uso de la misma por el mismo programa que la crea


[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

  1. 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. 
  2. Esta libreria tiene la función potencia, que calcula la potencia dada de un numero X elevado a Y.
  3. En programa  Gambas, la usa usando el comando Library y Private Extern Potencia()
  4. 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(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