// main.cc #include #include #include namespace { class global_type { }; void die() { std::cerr << dlerror() << std::endl; exit(1); } } int main() { boost::thread_specific_ptr< global_type > global_tss; void *handle = dlopen("./plugin.so", RTLD_LAZY | RTLD_LOCAL); if (!handle) die(); void *ptr = dlsym(handle, "run_plugin"); if (!ptr) die(); typedef void (*fptr_t) (); fptr_t fptr = (fptr_t) ptr; (*fptr) (); if (dlclose(handle)) die(); return 0; }