(root)/
glibc-2.38/
elf/
dblunload.c
       1  #include <dlfcn.h>
       2  #include <mcheck.h>
       3  #include <stdio.h>
       4  #include <stdlib.h>
       5  
       6  
       7  int
       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  }