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 open dblloadmod1.so: %s\n", dlerror ()); 21 exit (EXIT_FAILURE); 22 } 23 24 p2 = dlopen ("dblloadmod2.so", RTLD_LAZY); 25 if (p1 == NULL) 26 { 27 printf ("cannot open dblloadmod2.so: %s\n", dlerror ()); 28 exit (EXIT_FAILURE); 29 } 30 31 fp = dlsym (p1, "foo"); 32 if (fp == NULL) 33 { 34 printf ("cannot get function \"foo\": %s\n", dlerror ()); 35 exit (EXIT_FAILURE); 36 } 37 38 result = fp (); 39 40 if (dlclose (p1) != 0) 41 { 42 printf ("error while closing dblloadmod1.so: %s\n", dlerror ()); 43 exit (EXIT_FAILURE); 44 } 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