| #include <dlfcn.h> |
| #include <stdio.h> |
| |
| int |
| main (void) |
| { |
| int result = 0; |
| |
| /* First try to load an object which is a dependency. This should |
| succeed. */ |
| if (dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD) == NULL) |
| { |
| printf ("cannot open \"testobj1.so\": %s\n", dlerror ()); |
| result = 1; |
| } |
| else |
| puts ("loading \"testobj1.so\" succeeded, OK"); |
| |
| /* Now try loading an object which is not already loaded. */ |
| if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) != NULL) |
| { |
| puts ("succeeded in loading \"testobj5.so\""); |
| result = 1; |
| } |
| else |
| { |
| /* Load the object and run the same test again. */ |
| void *p; |
| |
| puts ("\"testobj5.so\" wasn't loaded and RTLD_NOLOAD prevented it, OK"); |
| |
| p = dlopen ("testobj5.so", RTLD_LAZY); |
| |
| if (p == NULL) |
| { |
| printf ("cannot open \"testobj5.so\" without RTLD_NOLOAD: %s\n", |
| dlerror ()); |
| result = 1; |
| } |
| else |
| { |
| puts ("loading \"testobj5.so\" succeeded, OK"); |
| |
| if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) == NULL) |
| { |
| printf ("cannot open \"testobj5.so\": %s\n", dlerror ()); |
| result = 1; |
| } |
| else |
| puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK"); |
| |
| if (dlclose (p) != 0) |
| { |
| printf ("cannot close \"testobj5.so\": %s\n", dlerror ()); |
| result = 1; |
| } |
| else |
| puts ("closing \"testobj5.so\" succeeded, OK"); |
| } |
| } |
| |
| return result; |
| } |
| |
| |
| extern int foo (int a); |
| int |
| foo (int a) |
| { |
| return 42 + a; |
| } |