diff --git a/src/pike_memory.c b/src/pike_memory.c
index 5a4ef44aa90021573885a645cfc39da28ccba9dd..2b477350e01e1f6013938519104978a7ba75e462 100644
--- a/src/pike_memory.c
+++ b/src/pike_memory.c
@@ -20,6 +20,23 @@ char *xalloc(SIZE_T size)
   return 0;
 }
 
+/* strdup() is used by several modules, so let's provide it */
+#ifndef HAVE_STRDUP
+char *strdup(const char *str)
+{
+  char *res = NULL;
+  if (str) {
+    int len = strlen(str)+1;
+
+    res = xalloc(len);
+    if (res) {
+      MEMCPY(res, str, len);
+    }
+  }
+  return(res);
+}
+#endif /* !HAVE_STRDUP */
+
 void swap(char *a, char *b, INT32 size)
 {
   int tmp;