diff --git a/configure.ac b/configure.ac
index f9bdc4ac27beba943b9a81dd997ca35070a3a572..559a55f847f056256056bef53c30ac212f098a6b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -119,10 +119,21 @@ fi
 LSH_CCPIC
 
 SHLIBCFLAGS="$CCPIC"
-SHLIBFORLINK=libnettle.so
-SHLIBSONAME='$(SHLIBFORLINK).$(SHLIBMAJOR)'
-SHLIBFILE='$(SHLIBSONAME).$(SHLIBMINOR)'
-SHLIBLINK='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(SHLIBSONAME)'
+
+case `uname -sr` in
+  CYGWIN*)
+    SHLIBFORLINK='cygnettle-$(SHLIBMAJOR)-$(SHLIBMINOR).dll'
+    SHLIBSONAME=''
+    SHLIBFILE='libnettle.dll.a'
+    SHLIBLINK='$(CC) $(LDFLAGS) -shared -Wl,--out-implib=$(SHLIBFILE) -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive'
+    ;;
+  *)
+    SHLIBFORLINK=libnettle.so
+    SHLIBSONAME='$(SHLIBFORLINK).$(SHLIBMAJOR)'
+    SHLIBFILE='$(SHLIBSONAME).$(SHLIBMINOR)'
+    SHLIBLINK='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(SHLIBSONAME)'
+    ;;
+esac
 
 if test "x$enable_shared" = xyes ; then
   SHLIBTARGET='$(SHLIBFORLINK)'