1 #include <dlfcn.h> 2 #include <mcheck.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 7 int main(void)8main (void) 9 { 10 void *p1; 11 void *p2; 12 int (*fp) (void); 13 int result; 14 15 mtrace (); 16 17 p1 = dlopen ("dblloadmod1.so", RTLD_LAZY); 18 if (p1 == NULL) 19 { 20 printf ("cannot load dblloadmod1.so: %s\n", dlerror ()); 21 exit (EXIT_FAILURE); 22 } 23 24 p2 = dlopen ("dblloadmod2.so", RTLD_LAZY); 25 if (p2 == NULL) 26 { 27 printf ("cannot load dblloadmod2.so: %s\n", dlerror ()); 28 exit (EXIT_FAILURE); 29 } 30 31 if (dlclose (p1) != 0) 32 { 33 printf ("error while closing dblloadmod1.so: %s\n", dlerror ()); 34 exit (EXIT_FAILURE); 35 } 36 37 fp = dlsym (p2, "xyzzy"); 38 if (fp == NULL) 39 { 40 printf ("cannot get function \"xyzzy\": %s\n", dlerror ()); 41 exit (EXIT_FAILURE); 42 } 43 44 result = fp (); 45 46 if (dlclose (p2) != 0) 47 { 48 printf ("error while closing dblloadmod2.so: %s\n", dlerror ()); 49 exit (EXIT_FAILURE); 50 } 51 52 return result; 53 } 54