https://foro.gambas-es.org/viewtopic.php?f=17&t=5477&p=32458#p32458
-----------------------------------
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:


