#include <dlfcn.h> #include <mcheck.h> #include <stdio.h> #include <stdlib.h> int main (void) { void *p1; void *p2; int (*fp) (void); int result; mtrace (); p1 = dlopen ("dblloadmod1.so", RTLD_LAZY); if (p1 == NULL) { printf ("cannot open dblloadmod1.so: %s\n", dlerror ()); exit (EXIT_FAILURE); } p2 = dlopen ("dblloadmod2.so", RTLD_LAZY); if (p1 == NULL) { printf ("cannot open dblloadmod2.so: %s\n", dlerror ()); exit (EXIT_FAILURE); } fp = dlsym (p1, "foo"); if (fp == NULL) { printf ("cannot get function \"foo\": %s\n", dlerror ()); exit (EXIT_FAILURE); } result = fp (); if (dlclose (p1) != 0) { printf ("error while closing dblloadmod1.so: %s\n", dlerror ()); exit (EXIT_FAILURE); } if (dlclose (p2) != 0) { printf ("error while closing dblloadmod2.so: %s\n", dlerror ()); exit (EXIT_FAILURE); } return result; }