#include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <dlfcn.h> #include <stdint.h> #define LIBNAME "libstatic.so" int load_and_test(void) { void *handle; int (*mystatic)(void); handle = dlopen(LIBNAME, RTLD_LAZY); if (!handle) { fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror()); return 1; } mystatic = dlsym(handle, "static_test"); if (mystatic == NULL) { fprintf(stderr, "Could not locate symbol 'static_test': %s\n", dlerror()); return 1; } if (!mystatic()) { fprintf(stderr, "mystatic() failed: static vars were not setup properly\n"); return 1; } dlclose(handle); return 0; } int main(int argc, char **argv) { int count = 5; while (count-- > 0) if (load_and_test()) return EXIT_FAILURE; return EXIT_SUCCESS; }