diff --git a/Makefile.in b/Makefile.in
index c771f112abb1eb176aecd68e76de35bf940e3f33..f3fa571c8f5b85b6be97c1154133e63241bbf96e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -161,18 +161,26 @@ libhogweed.a: $(hogweed_OBJS)
 	$(COMPILE) $(CCPIC_MAYBE) -c $< \
 	&& $(DEP_PROCESS)
 
-# Rules building shared libraries
+# Rules building shared libraries.
 $(LIBNETTLE_FORLINK): $(nettle_PURE_OBJS)
 	$(LIBNETTLE_LINK) $(nettle_PURE_OBJS) -o $@ $(LIBNETTLE_LIBS)
 	-mkdir .lib 2>/dev/null
-	[ -z "$(LIBNETTLE_SONAME)" ] || (cd .lib \
-          && ln -sf ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME))
+	(cd .lib \
+          && rm -f $(LIBNETTLE_FORLINK) \
+	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
+	  && [ -n "$(LIBNETTLE_SONAME)"] \
+	  || { rm -f $(LIBNETTLE_SONAME) \
+	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
 
 $(LIBHOGWEED_FORLINK): $(hogweed_PURE_OBJS) $(LIBNETTLE_FORLINK)
 	$(LIBHOGWEED_LINK) $(hogweed_PURE_OBJS) -o $@ $(LIBHOGWEED_LIBS)
 	-mkdir .lib 2>/dev/null
-	[ -z "$(LIBHOGWEED_SONAME)" ] || (cd .lib \
-          && ln -sf ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME))
+	(cd .lib \
+          && rm -f $(LIBHOGWEED_FORLINK) \
+	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
+	  && [ -n "$(LIBHOGWEED_SONAME)"] \
+	  || { rm -f $(LIBHOGWEED_SONAME) \
+	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
 
 .c.p$(OBJEXT):
 	$(COMPILE) $(SHLIBCFLAGS) -c $< -o $@ \
@@ -295,8 +303,9 @@ install-shared-nettle: $(LIBNETTLE_FORLINK) @IF_DLL@ install-dll-nettle
 	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
 	[ -z "$(LIBNETTLE_SONAME)" ] \
                 || (cd $(DESTDIR)$(libdir) \
-		&& ln -sf $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
-		&& ln -sf $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
+		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
+		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
+		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
 
 install-dll-hogweed:
 	$(MKDIR_P) $(DESTDIR)$(bindir)
@@ -307,8 +316,9 @@ install-shared-hogweed: $(LIBHOGWEED_FORLINK) @IF_DLL@ install-dll-hogweed
 	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
 	[ -z "$(LIBHOGWEED_SONAME)" ] \
                 || (cd $(DESTDIR)$(libdir) \
-		&& ln -sf $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
-		&& ln -sf $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
+		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
+		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
+		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
 
 # I'd like to use makes VPATH search to locate the files to be
 # installed. But it seems most make programs don't set $<, $^, $? and
diff --git a/config.make.in b/config.make.in
index 73aecc96c2b28e0661189cb37c244900dae755e4..58ee19c19af24edd95c0162ae5f735729436216b 100644
--- a/config.make.in
+++ b/config.make.in
@@ -53,6 +53,7 @@ AUTOHEADER = autoheader
 M4 = @M4@
 MAKEINFO = makeinfo
 RANLIB = @RANLIB@
+LN_S = @LN_S@
 
 prefix	=	@prefix@
 exec_prefix =	@exec_prefix@
diff --git a/configure.ac b/configure.ac
index 334bab0855df0e2728f20c70a9b35aa0311fdbca..9c9de1ed1a429bb708557c9820b72ac9c224977d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,6 +107,8 @@ AC_PROG_INSTALL
 # autoconf-2.60 or automake-1.10 to avoid races.
 AC_PROG_MKDIR_P
 
+AC_PROG_LN_S
+
 LSH_DEPENDENCY_TRACKING
 
 if test x$enable_dependency_tracking = xyes ; then