1 #include <stdio.h>
2 #include <dlfcn.h>
3 #include <limits.h>
4 #include <string.h>
5 #include <unistd.h>
6 #include <libgen.h>
7 #include <stdlib.h>
8 
9 int
10 main (int argc, char const *argv[])
11 {
12 #if defined (__APPLE__)
13     const char *a_name = "@executable_path/libloadunload_a.dylib";
14     const char *c_name = "@executable_path/libloadunload_c.dylib";
15 #else
16     const char *a_name = "libloadunload_a.so";
17     const char *c_name = "libloadunload_c.so";
18 #endif
19     void *a_dylib_handle = NULL;
20     void *c_dylib_handle = NULL;
21     int (*a_function) (void);
22 
23     a_dylib_handle = dlopen (a_name, RTLD_NOW); // Set break point at this line for test_lldb_process_load_and_unload_commands().
24     if (a_dylib_handle == NULL)
25     {
26         fprintf (stderr, "%s\n", dlerror());
27         exit (1);
28     }
29 
30     a_function = (int (*) ()) dlsym (a_dylib_handle, "a_function");
31     if (a_function == NULL)
32     {
33         fprintf (stderr, "%s\n", dlerror());
34         exit (2);
35     }
36     printf ("First time around, got: %d\n", a_function ());
37     dlclose (a_dylib_handle);
38 
39     c_dylib_handle = dlopen (c_name, RTLD_NOW);
40     if (c_dylib_handle == NULL)
41     {
42         fprintf (stderr, "%s\n", dlerror());
43         exit (3);
44     }
45     a_function = (int (*) ()) dlsym (c_dylib_handle, "c_function");
46     if (a_function == NULL)
47     {
48         fprintf (stderr, "%s\n", dlerror());
49         exit (4);
50     }
51 
52     a_dylib_handle = dlopen (a_name, RTLD_NOW);
53     if (a_dylib_handle == NULL)
54     {
55         fprintf (stderr, "%s\n", dlerror());
56         exit (5);
57     }
58 
59     a_function = (int (*) ()) dlsym (a_dylib_handle, "a_function");
60     if (a_function == NULL)
61     {
62         fprintf (stderr, "%s\n", dlerror());
63         exit (6);
64     }
65     printf ("Second time around, got: %d\n", a_function ());
66     dlclose (a_dylib_handle);
67 
68     int d_function(void);
69     printf ("d_function returns: %d\n", d_function());
70 
71     return 0;
72 }
73