#include #include #include #include /* This program dynamically loads a shared library (dylib) at run-time, looks up a function called foo(), and calls that function. */ #ifndef LIBNAME #define LIBNAME NULL #endif main (int argc, char **argv) { char *libname = NULL; if (LIBNAME) libname = LIBNAME; else if (argc == 2 && argv[1] != NULL) libname = argv[1]; if (libname) { if (! NSAddLibrary (libname)) { fprintf (stderr, "Unable to load `%s' library.\n", libname); exit (1); } if (NSIsSymbolNameDefined ("_foo")) { int (*addr)(void) = NSAddressOfSymbol (NSLookupAndBindSymbol ("_foo")); printf ("foo is resolved to address %lx\n", (unsigned long) addr); if (addr) addr (); } } else { fprintf (stderr, "No library specified.\n"); } if (SECONDLIBNAME) libname = SECONDLIBNAME; else if (argc == 2 && argv[1] != NULL) libname = argv[1]; if (libname) { if (! NSAddLibrary (libname)) { fprintf (stderr, "Unable to load `%s' library.\n", libname); exit (1); } if (NSIsSymbolNameDefined ("_blubby")) { int (*addr)(int) = NSAddressOfSymbol (NSLookupAndBindSymbol ("_blubby")); printf ("blubby is resolved to address %lx\n", (unsigned long) addr); if (addr) { addr (5); addr (6); } } } else { fprintf (stderr, "No library specified.\n"); } }