diff --git a/generate-stublib.sh b/generate-stublib.sh
index e04637ec616141e10d9b86eb65551d4c7db0637f..f86da78237166d1688c2759c12282da5a78fbd2b 100755
--- a/generate-stublib.sh
+++ b/generate-stublib.sh
@@ -30,6 +30,7 @@ proxy_extra=$1;    shift;
 proxy_src=$1;      shift;
 symbol_file=${proxy_src%.c}.symbols;
 map_file=${proxy_src%.c}.map;
+dlopen_file=${proxy_src}.dlopen;
 echo -n > $symbol_file;
 echo -n > $map_file;
 
@@ -76,7 +77,19 @@ do
 done < $proxy_excluded;
 cat - <<EOF
                                 NULL };
+EOF
 
+if [ -f ${dlopen_file} ];
+then
+    echo "// -------------------------------------------------------------";
+    echo "// start of ${proxy_src%.c} dlopen wrapper";
+    cat $dlopen_file;
+    echo "// end of ${proxy_src%.c} dlopen wrapper";
+    echo "// -------------------------------------------------------------";
+else
+    cat - <<EOF
+// -------------------------------------------------------------------------
+// start of default capsule dlopen wrapper function section
 static void *_dlopen (const char *filename, int flag)
 {
     if( flag & RTLD_GLOBAL )
@@ -88,6 +101,12 @@ static void *_dlopen (const char *filename, int flag)
     }
     return capsule_shim_dlopen( symbol_ns, prefix, exclude, filename, flag );
 }
+// end of default capsule dlopen wrapper function section
+// -------------------------------------------------------------------------
+EOF
+fi
+
+cat - <<EOF
 
 static void __attribute__ ((constructor)) _capsule_init (void)
 {