+#ifdef HAVE_DLMOPEN
+ h1 = dlmopen(LM_ID_BASE, "libfoo.so", RTLD_LAZY);
+ if (!h1) {
+ goto get_error;
+ }
+#endif
+
+ h2 = dlopen("libzzz.so", RTLD_LAZY);
+ if (!h2) {
+ goto get_error;
+ }
+ h3 = dlopen("libfoo.so", RTLD_LAZY);
+ if (!h3) {
+ goto get_error;
+ }
+ h4 = dlopen("libfoo.so", RTLD_LAZY);
+ if (!h4) {
+ goto get_error;
+ }
+
+ foo = dlsym(h3, "foo");
+ error = dlerror();
+ if (error != NULL) {
+ goto error;
+ }
+
+ foo();
+
+ if (dlclose(h0)) {
+ goto get_error;
+ }
+
+#ifdef HAVE_DLMOPEN
+ if (dlclose(h1)) {
+ goto get_error;
+ }
+#endif
+
+ if (dlclose(h2)) {
+ goto get_error;
+ }
+ if (dlclose(h3)) {
+ goto get_error;
+ }
+ if (dlclose(h4)) {
+ goto get_error;
+ }
+
+ exit(EXIT_SUCCESS);
+
+get_error:
+ error = dlerror();
+error:
+ fprintf(stderr, "%s\n", error);
+ exit(EXIT_FAILURE);