#include #include #include #include int main(int argc, char **argv) { char **t_reqs; void *handle = dlopen ("mygui.so", RTLD_LAZY); char ** (*get_requirements)(void); int (*initgui)(void); int (*opendialog)(void); int (*closedialog)(void); int t_i; int requirements_met = 0; if(!handle) { fputs(dlerror(), stderr); exit(1); } gtk_init(&argc, &argv); get_requirements = dlsym(handle, "get_requirements"); initgui = dlsym(handle, "initgui"); opendialog = dlsym(handle, "opendialog"); closedialog = dlsym(handle, "closedialog"); t_reqs = (*get_requirements)(); /* Superficial checking for requirements */ for(t_i = 0; t_reqs[t_i]; t_i++) { if(!strcmp(t_reqs[0], "GTK+")) { printf("Ok, if you want GTK+, we have it, baby.\n"); } requirements_met = 1; } if(requirements_met) { if(!initgui()) { printf("Couldn't initialize GUI"); } else { opendialog(); gtk_main(); } } closedialog(); dlclose(handle); }