Try getting the real RTLD_ flag values
diff --git a/OpenSSL/__init__.py b/OpenSSL/__init__.py
index 51dfdc9..004cd05 100644
--- a/OpenSSL/__init__.py
+++ b/OpenSSL/__init__.py
@@ -10,18 +10,39 @@
 """
 
 import sys
+
 try:
     orig = sys.getdlopenflags()
 except AttributeError:
-    pass
+    from OpenSSL import crypto
 else:
-    sys.setdlopenflags(2 | 256)
+    try:
+        import DLFCN
+    except ImportError:
+        try:
+            import dl
+        except ImportError:
+            try:
+                import ctypes
+            except ImportError:
+                flags = 2 | 256
+            else:
+                flags = 2 | ctypes.RTLD_GLOBAL
+                del ctypes
+        else:
+            flags = dl.RTLD_NOW | dl.RTLD_GLOBAL
+            del dl
+    else:
+        flags = DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL
+        del DLFCN
+
+    sys.setdlopenflags(flags)
     from OpenSSL import crypto
     sys.setdlopenflags(orig)
-    del orig
+    del orig, flags
 del sys
 
-from OpenSSL import rand, crypto, SSL
+from OpenSSL import rand, SSL
 from OpenSSL.version import __version__
 
 __all__ = [