12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdio.h> 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdlib.h> 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#ifdef DLOPEN_FUNC_DIR 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <dlfcn.h> 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid func(int K); 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid func2(int K); 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(int argc, char *argv[]) { 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#ifdef DLOPEN_FUNC_DIR 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines dlerror(); 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines void *f1_handle = dlopen(DLOPEN_FUNC_DIR"/func.shared", DLOPEN_FLAGS); 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (f1_handle == NULL) { 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fprintf(stderr, "unable to open '" DLOPEN_FUNC_DIR "/func.shared': %s\n", 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines dlerror()); 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return EXIT_FAILURE; 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines void (*func)(int) = (void (*)(int))dlsym(f1_handle, "func"); 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (func == NULL) { 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fprintf(stderr, "unable to lookup symbol 'func': %s\n", dlerror()); 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return EXIT_FAILURE; 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines void *f2_handle = dlopen(DLOPEN_FUNC_DIR"/func2.shared", DLOPEN_FLAGS); 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (f2_handle == NULL) { 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fprintf(stderr, "unable to open '" DLOPEN_FUNC_DIR "/func2.shared': %s\n", 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines dlerror()); 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return EXIT_FAILURE; 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines void (*func2)(int) = (void (*)(int))dlsym(f2_handle, "func2"); 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (func2 == NULL) { 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fprintf(stderr, "unable to lookup symbol 'func2': %s\n", dlerror()); 382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return EXIT_FAILURE; 392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines func(1); 432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines func2(0); 442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return EXIT_SUCCESS; 462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 48