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