1 #include <stdio.h> 2 #include <dlfcn.h> 3 4 int bar = -20; 5 6 int 7 main (void) 8 { 9 int ret = 0; 10 void *handle; 11 void (*fcn) (void); 12 13 handle = dlopen("./tmpdir/libdl6a.so", RTLD_GLOBAL|RTLD_LAZY); 14 if (!handle) 15 { 16 printf("dlopen ./tmpdir/libdl6a.so: %s\n", dlerror ()); 17 return 1; 18 } 19 20 fcn = (void (*)(void)) dlsym(handle, "foo"); 21 if (!fcn) 22 { 23 printf("dlsym foo: %s\n", dlerror ()); 24 ret += 1; 25 } 26 else 27 { 28 (*fcn) (); 29 } 30 31 dlclose (handle); 32 return ret; 33 } 34