1*6822f9c8Santon /* $OpenBSD: prog.c,v 1.4 2024/08/23 12:56:26 anton Exp $ */ 220dfae25Smatthieu /* Public Domain, 2008, Matthieu Herrb */ 320dfae25Smatthieu 420dfae25Smatthieu #include <dlfcn.h> 520dfae25Smatthieu #include <stdio.h> 6cd85c586Sjsg #include <stdlib.h> 79ae1fb7fSjsg #include <err.h> 820dfae25Smatthieu 920dfae25Smatthieu void *handle = NULL; 1020dfae25Smatthieu 1120dfae25Smatthieu typedef int (*foofunc)(void); 1220dfae25Smatthieu 1320dfae25Smatthieu int 1420dfae25Smatthieu main(int argc, char *argv[]) 1520dfae25Smatthieu { 1620dfae25Smatthieu foofunc foo; 1720dfae25Smatthieu int i; 1820dfae25Smatthieu 1920dfae25Smatthieu printf("loading: %s\n", FOO); 2020dfae25Smatthieu handle = dlopen(FOO, RTLD_LAZY|RTLD_GLOBAL); 2120dfae25Smatthieu if (handle == NULL) { 22*6822f9c8Santon errx(1, "dlopen: %s: %s", FOO, dlerror()); 2320dfae25Smatthieu } 2420dfae25Smatthieu printf("loaded: %s\n", FOO); 2520dfae25Smatthieu printf("looking up foo\n"); 2620dfae25Smatthieu foo = (foofunc)dlsym(handle, "foo"); 2720dfae25Smatthieu printf("found %p - calling it\n", foo); 2820dfae25Smatthieu i = foo(); 2920dfae25Smatthieu printf("done.\n"); 3020dfae25Smatthieu exit(i); 3120dfae25Smatthieu } 32