/* Start of myprog.c */
/* Compile with: gcc -o myprog -ldl myprog.c */

#include <dlfcn.h>
#include <stdio.h>

int main(int argc, char **argv) {
    void *lib;
    int (*init)(void);
    void (*init_module)(void);
    char *error;

    lib = dlopen("./mylib.so", RTLD_LAZY);
    if(!lib) {
	fprintf(stderr, "%s\n", dlerror());
	return 1;
    }
    dlerror();

    *(void **) (&init_module) = dlsym(lib, "init_module");
    if((error=dlerror()) != NULL) {
	fprintf(stderr, "%s\n", error);
	return 1;
    }
    (*init_module)();

    *(void **) (&init) = dlsym(lib, "init");
    if((error=dlerror()) != NULL) {
	fprintf(stderr, "%s\n", error);
	return 1;
    }
    (*init)();
    dlclose(lib);
    return 0;
}

/* vim: set ts=8 sw=4 sts=4 ai : */

/* End of myprog.c */
