blob: 7fd90c81466887ac9046403cbafd6582e62c6b82 [file] [log] [blame]
#include <stdio.h>
#include <mach-o/dyld.h>
#include <unistd.h>
#include <stdlib.h>
/* 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");
}
}