#include <dlfcn.h> #include <stdio.h> #include <malloc.h> int main (void) { #ifdef M_PERTURB mallopt (M_PERTURB, 0xaa); #endif void *h; int (*fn) (int); h = dlopen ("unload4mod1.so", RTLD_LAZY); if (h == NULL) { puts ("1st dlopen failed"); return 1; } fn = dlsym (h, "foo"); if (fn == NULL) { puts ("dlsym failed"); return 1; } int n = fn (10); if (n != 28) { printf ("foo (10) returned %d != 28\n", n); return 1; } dlclose (h); h = dlopen ("unload4mod3.so", RTLD_LAZY); fn = dlsym (h, "mod3fn2"); if (fn == NULL) { puts ("second dlsym failed"); return 1; } n = fn (10); if (n != 22) { printf ("mod3fn2 (10) returned %d != 22\n", n); return 1; } dlclose (h); return 0; }