(root)/
glibc-2.38/
elf/
constload2.c
       1  #include <dlfcn.h>
       2  #include <stdio.h>
       3  #include <stdlib.h>
       4  
       5  extern int bar (void);
       6  extern int baz (void);
       7  extern int foo (void);
       8  extern void __attribute__ ((__constructor__)) init (void);
       9  
      10  void *h;
      11  
      12  int
      13  foo (void)
      14  {
      15    return 42 + bar ();
      16  }
      17  
      18  int
      19  baz (void)
      20  {
      21    return -21;
      22  }
      23  
      24  
      25  void
      26  __attribute__ ((__constructor__))
      27  init (void)
      28  {
      29    h = dlopen ("constload3.so", RTLD_GLOBAL | RTLD_LAZY);
      30    if (h == NULL)
      31      {
      32        puts ("failed to load constload3");
      33        exit (1);
      34      }
      35    else
      36      puts ("succeeded loading constload3");
      37  }
      38  
      39  static void
      40  __attribute__ ((__destructor__))
      41  fini (void)
      42  {
      43    if (dlclose (h) != 0)
      44      {
      45        puts ("failed to unload constload3");
      46        exit (1);
      47      }
      48    else
      49      puts ("succeeded unloading constload3");
      50  }