https://foro.gambas-es.org/viewtopic.php?f=17&t=5477
-----------------------------------
jsbsan
Miercoles, 18 May 2016, 11:27

Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
Bueno sigo con el tema de los operadores con bit, 
 [img]https://foro.gambas-es.org/files/images/6/operadores_bit_a_bit.jpg[/img] 
estoy intentando hacer una libreria en C para llamarla desde gambas3

Me he hecho en programita en C:
[code linenumbers=false syntax=c]#include <stdio>

// ejemplo tomado de: http://www.zator.com/Cpp/E4_9_3.htm
// para compilar: gcc libm.cpp -o m
// para ejecutar: ./libm

// crear libreria .so:
// gcc -o libm.so libm.cpp -shared -fPIC


//x &= y;   // equivale a:  x = (x & y);
//x ^= y;   // equivale a:  x = (x ^ y);
//x |= y;   // equivale a:  x = (x | y);
 


int BitBarraVertical(int x,int y)
{
return  x|=y;
}

int BitAmpersand(int x,int y)
{
return  x&=y;
}

int BitComplemento(int x,int y) // complemento a uno'
{
return  x=~y;
}


int BitPotencia(int x,int y)
{
return x^=y;  
}



int main() {
  signed int x = 2, y = 7, z = 6, a = 2, b= -2;
 
 printf("Valor Inicial x = %d \n", x);
 printf("Valor Inicial y = %d \n", y );
 printf("Valor Inicial z = %d \n", z );
 printf("Valor Inicial a = %d \n", a );
 printf("Valor Inicial b = %d \n", b );

 
printf("\nOperaciones:\n") ;
 
printf("x &= -2\n");
printf("y ^= -2\n");
printf("z |= 13\n");
printf("a ~= 1\n");
 
 x &= -2;
y ^= -2;
z |= 13;
a <<1>>= 1;
 
printf("\nResultado:\n") ; 
 printf("Valor x = %d \n", x);
 printf("Valor y = %d \n", y );
 printf("Valor z = %d \n", z );
 printf("Valor a = %d \n", a );
 printf("Valor b = %d \n", b );
 
 
 x = 2;
 y = 7; 
 z = 6;
 a = 2;
 b= -2;
 
 x= BitAmpersand(x,-2);
 y= BitPotencia(y,-2);
 z= BitBarraVertical(z,13);
 
 
 
 
 printf("\nResultado con funciones:\n") ; 
 printf("Valor x = %d \n", x);
 printf("Valor y = %d \n", y );
 printf("Valor z = %d \n", z );
 
 
 
}[/code]

Luego lo compilo, y creo el archivo .so:
gcc -o libm.so libm.cpp -shared -fPIC

El archivo que crea lo copio en el mismo directorio donde estoy creando el programa en gambas3 (para que lo encuentre sin problemas)

Ahora me hago el programita en gambas3:
[code linenumbers=false syntax=gambas]' Gambas module file
library "libm"

private extern BitBarraVertical(x as integer,y as integer) as integer
private extern BitAmpersand(x as integer,y as integer) as integer
private extern BitPotencia(x as integer,y as integer) as integer

 
Public Sub Main()
dim n as integer
dim x as integer=2
dim y as integer=7
dim z as integer=6



x= BitAmpersand(x,-2)
y= BitPotencia(y,-2)
z= BitBarraVertical(z,13)

print "aplicando funciones externas:"
print "x ",x 
print "y ",y
print "z ",z

end
[/code]

Y cuando lo ejecuto me dice:
[quote]MMain.Main.20: #61: Cannot find symbol 'BitAmpersand' in dynamic library 'libm'
1: MMain.Main.20[/quote]

Osea que es como si no encontrare  la función "BitAmpersand" en la libreria libm....

¿alguna ayuda? :roll:  :roll:


-----------------------------------
vuott
Miercoles, 18 May 2016, 12:04

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
El tu codigo en C++ al compilarlo me da estos errores:

[color=#8C0000][i]/tmp/c.cpp: In function ‘int BitBarraVertical(int, int)’:
/tmp/c.cpp:23:11: error: ‘PIPE’ was not declared in this scope
 return  x<PIPE>=y;
           ^
/tmp/c.cpp: In function ‘int main()’:
/tmp/c.cpp:47:37: error: ‘printf’ was not declared in this scope
  printf("Valor Inicial x = %d \n", x);
                                     ^
/tmp/c.cpp:63:4: error: ‘PIPE’ was not declared in this scope
 z <PIPE>= 13;
    ^
/tmp/c.cpp:64:6: error: lvalue required as left operand of assignment
 a <<1>>= 1;
      ^[/i][/color]


-----------------------------------
jsbsan
Miercoles, 18 May 2016, 12:12

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
Vuott:


Donde pone <PIPE> hay que poner el caracter de la barra vertical

Y a <<1>>= 1;
es  solo doble <

Te adjunto el código (no es exactamente el mismo que he pegado arriba), pero lo he simplificado más.


-----------------------------------
vuott
Miercoles, 18 May 2016, 12:27

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
[quote user="jsbsan" post="32460"]Te adjunto el código [/quote]
He visto.
Lo he modificado de C++ a C:

[code linenumbers=false syntax=c]#include <stdio.h>

int BitBarraVertical(int x,int y)
{
return  x|=y;
}

int BitAmpersand(int x,int y)
{
return  x&=y;
}

int BitComplemento(int x,int y) // complemento a uno'
{
return  x=~y;
}


int BitPotencia(int x,int y)
{
return x^=y;  
}[/code]
y lo probé con el tu programito Gambas. Esta la su salida:
[i]aplicando funciones externas:
x       2
y       -7
z       15
El complemento a uno de 0 es: -1[/i]


Pero esto [b][size=14][color=#990000]^[/color][/size][/b] en C/C++ no es Potencia, es XOR.
saludos


-----------------------------------
jsbsan
Miercoles, 18 May 2016, 12:57

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
vuott:

[strike]¿me puedes decir los pasos que has seguido para compilarlo y crear la libreria?[/strike]

Vale, lo acabo de compilar asi:
 $ gcc -fPIC -c Bit.c 

$ gcc -shared -o Bit.so Bit.o 

Y el archivo generado lo he copiado (bit.so)  a donde esta el proyecto de gambas, y funciona!!!!

que cosa más rara que con .cpp no funcione ¿no?


-----------------------------------
vuott
Miercoles, 18 May 2016, 13:02

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
...en Gambas:

[code linenumbers=false syntax=gambas]Print " & ---->", x And -2
Print " ^ ---->", y Xor -2
Print " | ---->", z Or 13
Print " ~ ---->", Not 0[/code]


-----------------------------------
vuott
Miercoles, 18 May 2016, 13:03

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
[quote user="jsbsan" post="32462"]¿me puedes decir los pasos que has seguido para compilarlo y crear la libreria?[/quote]

[size=14][color=#A50000]gcc -o /tmp/libBit.so /tmp/libBit.c -shared[/color][/size]


-----------------------------------
jsbsan
Miercoles, 18 May 2016, 13:12

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
Vuott:

[quote]Print " & ---->", x And -2
Print " ^ ---->", y Xor -2
Print " | ---->", z Or 13
Print " ~ ---->", Not 0[/quote]
¿y eso de donde lo has sacado??  :roll:  :roll:


-----------------------------------
vuott
Miercoles, 18 May 2016, 14:08

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
[quote user="jsbsan" post="32465"]¿y eso de donde lo has sacado??  [/quote]
...de un cualquier manual de C.


-----------------------------------
vuott
Miercoles, 18 May 2016, 14:38

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
[quote user="jsbsan" post="32458"]Y cuando lo ejecuto me dice:
[quote]MMain.Main.20: #61: Cannot find symbol 'BitAmpersand' in dynamic library 'libm'
1: MMain.Main.20[/quote]

Osea que es como si no encontrare  la función "BitAmpersand" en la libreria libm....[/quote]

Esta es la razón por la que yo no creo librerias .so escritas en C++. No es posible llamar las sus funciones directamente con sus nombres.
Si quieres utilizar una tu libreria escrita en C++, tienes que escribir y llamar la routine principal "[i]main( )[/i]". Entre de esta routine puedes escribir lo que te necesita, o puedes llamar [u]desde[/u] [i]main()[/i] una sub-routine:
http://www.gambas-it.org/wiki/index.php?title=Richiamare_funzioni_esterne_di_librerie_scritte_in_C%2B%2B#Caso_in_cui_si_debbano_utilizzare_pi.C3.B9_funzioni_esterne


-----------------------------------
Shell
Miercoles, 18 May 2016, 19:27

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
Ejem...

https://www.codecademy.com/courses/python-intermediate-en-aHjdg/0/1

Saludos!


-----------------------------------
jsbsan
Miercoles, 18 May 2016, 19:32

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
Vuott:

Muchas gracias, me has aclarado el tema :)
Pensaba que en gambas3 no era tan sencillo, y me tenian locos estos operadores.

Resumen (en Gambas3)
[quote]
Public Sub Main()
  
  Dim z, x, y As Integer
  
  x = 7
  y = -2
  
  z = x Xor y '' z = x ^ y
  
  Print "z= x ^ y  ", z
  
  x = 6
  y = 13
  
  z = x Or y
  
  Print "z= x | y  ", z
  
  x = 2
  y = -2
  
  z = x And y
  
  Print "z= x & y  ", z
  
  x = 1
  
  z = Not x
  
  Print "z= ~x  ", z
  
  Print "x &= y;   // equivale a: x = (x & y); AND"
  Print "x ^= y;   // equivale a: x = (x ^ y); XOR"
  Print "x |= y;   // equivale a: x = (x | y); OR"
  Print "x ~= y;   // equivale a: x = (x ~ y); NOT"
  
  Wait 20
  
End
[/quote]


-----------------------------------
jguardon
Jueves, 19 May 2016, 00:12

Re: Desarrollando Libreria Para Operadores Con Bit
-----------------------------------
[quote user="jsbsan" post="32460"]Vuott:


Donde pone <PIPE> hay que poner el carácter de la barra vertical

[/quote]

Eso es porque hay que poner el nombre del lenguaje en minúsculas, tenías puesto C en lugar de c.

Saludos


-----------------------------------
jsbsan
Jueves, 19 May 2016, 11:55

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
Jguardon:

Ok, lo acabo de corregir.


-----------------------------------
jguardon
Jueves, 19 May 2016, 22:40

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
La pregunta es para qué necesitas la librería, ya que creo que casi todos los operadores tienen el correspondiente en gambas...

http://gambaswiki.org/wiki/cat/bit

Si falta alguno, es fácil que Benoit lo pueda añadir si se lo pides.

Saludos


-----------------------------------
jsbsan
Viernes, 20 May 2016, 06:45

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
Jguardon:

[quote]La pregunta es para qué necesitas la librería, ya que creo que casi todos los operadores tienen el correspondiente en gambas...

http://gambaswiki.org/wiki/cat/bit

Si falta alguno, es fácil que Benoit lo pueda añadir si se lo pides.[/quote]

Creo que con lo que ha explicado Vuott, ya lo tengo resuelto... espero.


Saludos


-----------------------------------
vuott
Viernes, 20 May 2016, 09:25

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
[quote user="jsbsan" post="32507"]con lo que ha explicado Vuott, ya lo tengo resuelto... espero.[/quote]

...co......como "[i][font=Verdana]espero[/font][/i]" ?    :shock:


-----------------------------------
jsbsan
Viernes, 20 May 2016, 11:12

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
Vuott:
[quote]
...co......como "espero" ?  [/quote]

 :oops:  :oops: Todavia no he hecho el trabajo de traducción del código que necesito (que esta hecho en javascrit, pero que usa los operadores logicos de bit de C) , por eso pongo que "espero".

Pero quedate tranquilo, que si tengo algún problema, te lo pregunto  :lol:  :lol:  :lol:


-----------------------------------
vuott
Viernes, 20 May 2016, 12:08

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
[quote user="jsbsan" post="32511"]... si tengo algún problema, te lo pregunto [/quote]

[i]Miserere mei, Domine ![/i]

[img]http://www.sherv.net/cm/emoticons/guns/headshot-suicide.gif[/img]


-----------------------------------
jsbsan
Viernes, 20 May 2016, 12:24

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
Vuott:


[quote]Miserere mei, Domine !  [/quote]

Ahhh!!!! eso te pasa por dominar a C

 :mryellow:  :mryellow:


-----------------------------------
vuott
Viernes, 20 May 2016, 12:31

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
[quote user="jsbsan" post="32517"]Ahhh!!!! eso te pasa por dominar a C[/quote]

....porque no has visto lo que pasa a los [i]Pythonistas[/i] !    :lol:


-----------------------------------
jsbsan
Viernes, 20 May 2016, 12:36

Re: Desarrollando Libreria Para Operadores Con Bit [Solucionado]
-----------------------------------
vuott:

[quote]...porque no has visto lo que pasa a los Pythonistas ![/quote]
¿te refieres a esto?

 [img]https://foro.gambas-es.org/files/images/6/python_tragandose_un_elefante.png[/img] 

Pobre Shell  :twisted:  :twisted:  :twisted:


