// use dynamic loader to lookup function by name and return pointer-to-function // compile with -rdynamic -ldl -lm // // R. Perry, March 2019 // #include #include #include "lookup.h" Func lookup( const char *name) { static void *vp = NULL; char *err; dlerror(); // clear any existing error if( !vp) { vp = dlopen( NULL, RTLD_LAZY); // open my own executable if( !vp) { err = dlerror(); fprintf( stderr, "dlopen: %s\n", err ? err : "unknown error"); return NULL; } } void *a = dlsym( vp, name); err = dlerror(); if( err) { fprintf( stderr, "dlsym: %s\n", err); return NULL; } Func f; *(void **)(&f) = a; return f; // f = a, with cast to avoid compile warning }