dlopen(), dlsym() & dlerror()
Miguel Cárdenas
mcmail_y2k en yahoo.com
Jue Nov 23 21:39:15 CST 2000
Holas!!
Ando haciendo una libreria muy sencilla de prueba, pero nomas no me funka... ya
antes habia hecho una que si funcionaba, pero esta vez no jala y no se que
estoy haciendo mal... les pego el fuente aqui rapidamente...
/*
* ESTA ES LA LIBRERIA CON 1 SOLA FUNCION (lib.cc)
*/
#include <stdio.h>
int sumar (int a, int b) {
return (a+b);
}
esta libreria la compilo de la siguiente forma:
g++ -fPIC -c lib.cc
g++ -shared -Wl,-soname,lib.so.1 -o lib.so.1 lib.o
el programa de prueba es el siguiente:
#include <stdio.h>
#include <dlfcn.h>
int main (void) {
void* handle = dlopen("./lib.so.1",RTLD_LAZY);
if (!handle) {
printf("\n%s",dlerror());
return 0;
}
int(*s)(int,int) =
(int(*)(int,int)) dlsym(handle,"sumar");
if (!s) {
printf("\n%s",dlerror());
return 0;
}
dlclose(handle);
return 0;
}
y lo compilo con lo siguiente:
g++ -ldl -lstdc++ -o suma suma.cc
este programa al ser ejecutado me devuelve el siguiente error:
./lib.so.1: undefined symbol: sumar
Anteriormente ya habia usado librerias algo mas complejas y funcionaban, pero
orita nomas no jala... osea si abre adecuadamente el lib.so.1 (cuando no existe
esta me manda error de que no la puede abrir, pero el programa falla hasta el
dlsym y no en el dlopen) pero no encuentra la mentada funciona ni a golpes...
Alguien podra orientar a esta alma sin rumbo? =)
Thx men!!
--
Miguel Cárdenas
--------------------
mcmail_y2k en yahoo.com
---------------------------------------------------------
para salir de la lista, enviar un mensaje con las palabras
"unsubscribe ayuda" en el cuerpo a majordomo en linux.org.mx
Más información sobre la lista de distribución Ayuda