diff --git a/wrappers/gmshpy/CMakeLists.txt b/wrappers/gmshpy/CMakeLists.txt
index 131ba9f4973683babe881ca7efd02618d9173676..e5d012d46d46d59ca0656c52b0c25211aed4facb 100644
--- a/wrappers/gmshpy/CMakeLists.txt
+++ b/wrappers/gmshpy/CMakeLists.txt
@@ -72,6 +72,18 @@ endif(ENABLE_PYTHON_LIB_API)
 include(${SWIG_USE_FILE})
 include_directories(${PYTHON_INCLUDE_PATH})
 
+IF(HAVE_MPI)
+  # this hack is only required for openmpi compiled with dynamic modules
+  # unfortunately I do not know how to detect this situation => I always enable it
+  set(GMSH_PYTHON_MODULES_INCLUDE_CODE "import ctypes\n")
+  FOREACH (lib ${MPI_C_LIBRARIES})
+    IF (${lib} MATCHES ".*libmpi.*")
+      set(GMSH_PYTHON_MODULES_INCLUDE_CODE 
+        "${GMSH_PYTHON_MODULES_INCLUDE_CODE}ctypes.CDLL(\"${lib}\", mode = ctypes.RTLD_GLOBAL)\n")
+    ENDIF (${lib} MATCHES ".*libmpi.*")
+  ENDFOREACH (lib)
+ENDIF(HAVE_MPI)
+
 foreach(module ${SWIG_MODULES})
   set_source_files_properties(${module}.i PROPERTIES CPLUSPLUS ON)