diff -ur a/libguile/loader.c b/libguile/loader.c
--- a/libguile/loader.c
+++ b/libguile/loader.c
@@ -32,9 +32,25 @@
 #include <sys/types.h>
 #include <unistd.h>
 #include <verify.h>
-#ifdef HAVE_SYS_MMAN_H
+
+#ifdef __MINGW32__
+#define MAP_FAILED ((void *) -1)
+#define MAP_PRIVATE 0x02
+#define PROT_READ 0x1
+#define PROT_WRITE 0x2
+#define PROT_EXEC 0x4
+static void* mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) {
+  void *mem = malloc(length);
+  if (mem && fd != -1) {
+    lseek(fd, offset, SEEK_SET);
+    read(fd, mem, length);
+  }
+  return mem ? mem : MAP_FAILED;
+}
+static int munmap(void *addr, size_t length) { if(addr) free(addr); return 0; }
+static int mprotect(void *addr, size_t len, int prot) { return 0; }
+static int getpagesize(void) { return 4096; }
+#define HAVE_SYS_MMAN_H 1
+#elif HAVE_SYS_MMAN_H
 #include <sys/mman.h>
 #endif
 
diff -ur a/libguile/vm.c b/libguile/vm.c
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -31,7 +31,20 @@
 #include <string.h>
 #include <unistd.h>
 
-#ifdef HAVE_SYS_MMAN_H
+#ifdef __MINGW32__
+#include <windows.h>
+#define MAP_FAILED ((void *) -1)
+#define MAP_PRIVATE 0x02
+#define PROT_READ 0x1
+#define PROT_WRITE 0x2
+#define PROT_EXEC 0x4
+static void* mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) {
+  return malloc(length);
+}
+static int munmap(void *addr, size_t length) { if(addr) free(addr); return 0; }
+static int getpagesize(void) { return 4096; }
+#define HAVE_SYS_MMAN_H 1
+#elif HAVE_SYS_MMAN_H
 #include <sys/mman.h>
 #endif
 
