Patch 102114, Bug 11725.  On OpenBSD (but apparently not on the other
BSDs) you need a leading underscore in the dlsym() lookup name.
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index 2b0e74e..28f50b1 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -16,6 +16,12 @@
 #endif
 #endif
 
+#ifdef __OpenBSD__
+#define LEAD_UNDERSCORE "_"
+#else
+#define LEAD_UNDERSCORE ""
+#endif
+
 #ifndef RTLD_LAZY
 #define RTLD_LAZY 1
 #endif
@@ -54,8 +60,7 @@
 		pathname = pathbuf;
 	}
 
-	/* ### should there be a leading underscore for some platforms? */
-	sprintf(funcname, "init%.200s", shortname);
+	sprintf(funcname, LEAD_UNDERSCORE "init%.200s", shortname);
 
 	if (fp != NULL) {
 		int i;