#include <dlfcn.h>
#include <err.h>
#include <unistd.h>

int
main(void)
{
       static const char msg1[] = "main started\n";
       static const char msg2[] = "main after dlopen\n";
       static const char msg3[] = "main terminated\n";

       void *handle;

       write(STDOUT_FILENO, msg1, sizeof(msg1) - 1);
       handle = dlopen("h_initfini3_dso.so", RTLD_NOW | RTLD_LOCAL);
       if (handle == NULL)
               err(1, "dlopen");
       write(STDOUT_FILENO, msg2, sizeof(msg2) - 1);
       dlclose(handle);
       write(STDOUT_FILENO, msg3, sizeof(msg3) - 1);
       return 0;
}