/* * Ejemplo de uso de dlfcn.h, para la carga dinámica de módulos. * * Jorge López, 2004/04/29 * * compilación: gcc -ldl -o modulos modulos.c * */ #include #include #include int main(void) { int a, b; void *identmodulo; void (*funcion)(); int (*opera)(int,int); puts("Dame un par de números"); fscanf(stdin, "%d", &a); fscanf(stdin, "%d", &b); /* Cargamos módulo */ identmodulo = dlopen("./prueba.so", RTLD_LAZY); if (identmodulo == NULL) { char *msjerror = dlerror(); puts("Algo falló:"); puts(msjerror); exit(EXIT_FAILURE); } funcion = dlsym(identmodulo, "saludo"); if (funcion == NULL) { puts("No existe la función saludo()!"); dlclose(identmodulo); exit(EXIT_FAILURE); } /* Llamamos a la función */ (*funcion)(); opera = dlsym(identmodulo, "multiplica"); if (opera == NULL) { puts("No existe la función multiplica()!"); dlclose(identmodulo); exit(EXIT_FAILURE); } printf("El resultado es %d\n", (int)(*opera)(a, b)); if ((dlclose(identmodulo))!=0) { puts("Algo falló al descargar el módulo:"); puts(dlerror()); } exit(EXIT_SUCCESS); }