#include "c.h" #include "dlfcn.h" #include using namespace std; int main (int argc, const char * * argv) { void * lib = dlopen ("./libabc.so", RTLD_LAZY); if (lib == NULL) cout << "Cannot load library" << endl; else { cout << "Library loaded" << endl; void * p = dlsym (lib, "z"); if (p == NULL) cout << "Function not found" << endl; else { cout << "Function is ready" << endl; typedef void (*func_t) ( const char * ); func_t u = (func_t) p; // func_t u = reinterpret_cast (p); u ("a.cc"); } typedef void (*func_t) ( const char * ); func_t v = (func_t) dlsym (lib, "f"); if (v != NULL) v ("pokus"); int * w = (int *) dlsym (lib, "g"); if (w != NULL) cout << "Variable g = " << *w << endl; // #include "c.h" typedef C * ( * fact_t ) (); fact_t f = (fact_t) dlsym (lib, "cfactory"); if (f != NULL) { C * q = f (); q->setName ("Neco"); q->print (); } void * lib2 = dlopen ("./libklm.so", RTLD_LAZY); if (lib2 != NULL) { cout << "Second library loaded" << endl; typedef C * ( * fact_t ) (); fact_t f2 = (fact_t) dlsym (lib2, "cfactory"); if (f2 != NULL) { C * q2 = f2 (); q2->setName ("Neco jineho"); q2->print (); } dlclose (lib2); } dlclose (lib); } return 0; }