11.1Sjoerg#include <dlfcn.h> 21.1Sjoerg#include <err.h> 31.1Sjoerg#include <unistd.h> 41.1Sjoerg 51.1Sjoergint 61.1Sjoergmain(void) 71.1Sjoerg{ 81.1Sjoerg static const char msg1[] = "main started\n"; 91.1Sjoerg static const char msg2[] = "main after dlopen\n"; 101.1Sjoerg static const char msg3[] = "main terminated\n"; 111.1Sjoerg 121.1Sjoerg void *handle; 131.1Sjoerg 141.1Sjoerg write(STDOUT_FILENO, msg1, sizeof(msg1) - 1); 151.2Sjoerg handle = dlopen("h_initfini3_dso.so", RTLD_NOW | RTLD_LOCAL); 161.1Sjoerg if (handle == NULL) 171.1Sjoerg err(1, "dlopen"); 181.1Sjoerg write(STDOUT_FILENO, msg2, sizeof(msg2) - 1); 191.1Sjoerg dlclose(handle); 201.1Sjoerg write(STDOUT_FILENO, msg3, sizeof(msg3) - 1); 211.1Sjoerg return 0; 221.1Sjoerg} 23