| #include <dlfcn.h> |
| #include <mcheck.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| |
| int |
| main (void) |
| { |
| void *p1; |
| void *p2; |
| int (*fp) (void); |
| int result; |
| |
| mtrace (); |
| |
| p1 = dlopen ("dblloadmod1.so", RTLD_LAZY); |
| if (p1 == NULL) |
| { |
| printf ("cannot load dblloadmod1.so: %s\n", dlerror ()); |
| exit (EXIT_FAILURE); |
| } |
| |
| p2 = dlopen ("dblloadmod2.so", RTLD_LAZY); |
| if (p2 == NULL) |
| { |
| printf ("cannot load dblloadmod2.so: %s\n", dlerror ()); |
| exit (EXIT_FAILURE); |
| } |
| |
| if (dlclose (p1) != 0) |
| { |
| printf ("error while closing dblloadmod1.so: %s\n", dlerror ()); |
| exit (EXIT_FAILURE); |
| } |
| |
| fp = dlsym (p2, "xyzzy"); |
| if (fp == NULL) |
| { |
| printf ("cannot get function \"xyzzy\": %s\n", dlerror ()); |
| exit (EXIT_FAILURE); |
| } |
| |
| result = fp (); |
| |
| if (dlclose (p2) != 0) |
| { |
| printf ("error while closing dblloadmod2.so: %s\n", dlerror ()); |
| exit (EXIT_FAILURE); |
| } |
| |
| return result; |
| } |