1 #include <dlfcn.h>
2 #include <mcheck.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 
6 
7 int
main(void)8 main (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