Autor
|
Tema: Problema con dlopen(). (Leído 2,165 veces)
|
0xDani
Desconectado
Mensajes: 1.077
|
Hola! Estoy tratando de cargar librerias dinamicas (.so en linux) dinamicamente, valga la redundancia xD. El problema es que he creado una simple libreria dinamica, con tres funciones estupidas (las que me hacia por defecto el C::B) y la funcion dlopen() siempre retorna NULL. #include <dlfcn.h> #include <stdio.h> int main() { typedef int (*function)(int, int); void* handle = dlopen("libtest.so", RTLD_LAZY); if(!handle ){ printf("dlopen"); return 1; } function fnc = (function) dlsym(handle, "SampleAddInt"); fnc(); dlclose(handle); return 0; }
El archivo libtest.so esta en la misma carpeta que el ejecutable, y tampoco funciona si le pongo la ruta completa. Por supuesto la salida de la consola siempre es "dlopen". ¿Que puede estar pasando? ¿Porque dlopen() siempre falla? Saludos.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Prueba con esto que he encontrado aquí --> http://stackoverflow.com/questions/8193640/dlopen-search-pathIf you want to ensure that a specific library is dlopen-ed, pass a path to dlopen, e.g. dlopen("/some/path/to/lib.so", RTLD_LOCAL) or maybe dlopen("./lib.so", RTLD_LOCAL) but not dlopen("lib.so", RTLD_LOCAL).Prueba con este , ya puedes imaginar lo que he cambiado: #include <dlfcn.h> #include <stdio.h> int main() { typedef int (*function)(int, int); void* handle = dlopen("./libtest.so", RTLD_LAZY); if(!handle ){ printf("dlopen"); return 1; } function fnc = (function) dlsym(handle, "SampleAddInt"); fnc(); dlclose(handle); return 0; }
|
|
|
En línea
|
Regístrate en
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Gracias por la respuesta! Que raro, creia haber leido todos los temas de stack overflow que tenian que ver con esto . Ha funcionado asi y con la ruta completa. Saludos.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Gracias por la respuesta! Que raro, creia haber leido todos los temas de stack overflow que tenian que ver con esto . Ha funcionado asi y con la ruta completa. Saludos. Jajajaja bueno , a uno se le pasa cualquier cosa ¡Un saludo!
|
|
|
En línea
|
Regístrate en
|
|
|
Foxy Rider
Desconectado
Mensajes: 2.407
Deprecated
|
Estoooo, vale leer la manpage de dlopen() ... el tema de cómo se maneja el path para buscar la librería, está explicado ahí
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Estoooo, vale leer la manpage de dlopen() ... el tema de cómo se maneja el path para buscar la librería, está explicado ahí Yo no lo encontre, solo he visto esto: #include <dlfcn.h>
void *dlopen(const char *file, int mode); The file argument is used to construct a pathname to the object file. If file contains a slash character, the file argument is used as the pathname for the file. Otherwise, file is used in an implementation-defined manner to yield a pathname.
Saludos.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
|
|