estoy intentando hacer una libreria en C para llamarla desde gambas3
Me he hecho en programita en 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 );
}
// 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 );
}
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:
' 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
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
Y cuando lo ejecuto me dice:
Citar:
Osea que es como si no encontrare la función "BitAmpersand" en la libreria libm....
¿alguna ayuda?