#include #include int main() { void *h = dlopen("./dso.so", RTLD_NOW|RTLD_GLOBAL); if (!h) { fprintf(stderr, "dlopen: %s\n", dlerror()); return 1; } char *p = dlsym(h, "tlsbuf"); if (!p) { fprintf(stderr, "dlsym: %s\n", dlerror()); return 1; } printf("tlsbuf = %s\n", p); char*(*f)() = dlsym(h, "gettls"); if (!f) { fprintf(stderr, "dlsym: %s\n", dlerror()); return 1; } printf("gettls() = %s\n", f()); h = dlopen("./gltest.so", RTLD_NOW|RTLD_GLOBAL); if (!h) { fprintf(stderr, "dlopen: %s\n", dlerror()); return 1; } int (*gltest)() = dlsym(h, "gltest"); if (!gltest) { fprintf(stderr, "dlsym: %s\n", dlerror()); return 1; } printf("gltest() = %i\n", gltest()); return 0; }