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 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