#include <stdlib.h> #include <string.h> #include <dlfcn.h> #include <assert.h> extern void* rt_loadLibrary(const char*); extern int rt_unloadLibrary(void*); extern int rt_init(void); extern int rt_term(void); int main(int argc, char* argv[]) { if (!rt_init()) return EXIT_FAILURE; const size_t pathlen = strrchr(argv[0], '/') - argv[0] + 1; char *name = malloc(pathlen + sizeof("lib.so")); memcpy(name, argv[0], pathlen); memcpy(name+pathlen, "lib.so", sizeof("lib.so")); void *dlib = rt_loadLibrary(name); free(name); assert(dlib); int (*runTests)(void) = dlsym(dlib, "runTests"); assert(runTests()); assert(rt_unloadLibrary(dlib)); if (!rt_term()) return EXIT_FAILURE; return EXIT_SUCCESS; } |