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