diff --git a/src/IceUtil/ArgVector.cpp b/src/IceUtil/ArgVector.cpp
index 7e236a5..4fee8a3 100644
--- a/src/IceUtil/ArgVector.cpp
+++ b/src/IceUtil/ArgVector.cpp
@@ -9,6 +9,7 @@
#include <IceUtil/ArgVector.h>
#include <IceUtil/DisableWarnings.h>
+#include <cstring>
IceUtil::ArgVector::ArgVector(int argc, char *argv[])
{
diff --git a/src/IceUtil/MD5.cpp b/src/IceUtil/MD5.cpp
index f7e818b..dd80a19 100644
--- a/src/IceUtil/MD5.cpp
+++ b/src/IceUtil/MD5.cpp
@@ -9,6 +9,7 @@
#include <IceUtil/MD5.h>
#include <IceUtil/MD5I.h>
+#include <cstring>
using namespace std;
diff --git a/src/IceUtil/OutputUtil.cpp b/src/IceUtil/OutputUtil.cpp
index e3ef63d..e5a7380 100644
--- a/src/IceUtil/OutputUtil.cpp
+++ b/src/IceUtil/OutputUtil.cpp
@@ -8,6 +8,7 @@
// **********************************************************************
#include <IceUtil/OutputUtil.h>
+#include <cstring>
using namespace std;
using namespace IceUtil;
diff --git a/src/IceUtil/Random.cpp b/src/IceUtil/Random.cpp
index bbe8b52..d78341c 100644
--- a/src/IceUtil/Random.cpp
+++ b/src/IceUtil/Random.cpp
@@ -9,6 +9,7 @@
#include <IceUtil/Random.h>
#include <IceUtil/StaticMutex.h>
+#include <cstring>
#ifdef _WIN32
# include <Wincrypt.h>
diff --git a/src/IceUtil/ThreadException.cpp b/src/IceUtil/ThreadException.cpp
index 4f47472..5d08456 100644
--- a/src/IceUtil/ThreadException.cpp
+++ b/src/IceUtil/ThreadException.cpp
@@ -8,6 +8,7 @@
// **********************************************************************
#include <IceUtil/ThreadException.h>
+#include <cstring>
using namespace std;
diff --git a/src/Slice/CPlusPlusUtil.cpp b/src/Slice/CPlusPlusUtil.cpp
index 5624801..088cd4d 100644
--- a/src/Slice/CPlusPlusUtil.cpp
+++ b/src/Slice/CPlusPlusUtil.cpp
@@ -8,6 +8,7 @@
// **********************************************************************
#include <Slice/CPlusPlusUtil.h>
+#include <cstring>
using namespace std;
using namespace Slice;
diff --git a/src/Slice/DotNetNames.cpp b/src/Slice/DotNetNames.cpp
index f55f647..a4889d3 100755
--- a/src/Slice/DotNetNames.cpp
+++ b/src/Slice/DotNetNames.cpp
@@ -9,6 +9,7 @@
#include <Slice/DotNetNames.h>
#include <ctype.h>
+#include <cstring>
using namespace std;
diff --git a/src/Slice/Grammar.cpp b/src/Slice/Grammar.cpp
index 7640e27..e55d2da 100644
--- a/src/Slice/Grammar.cpp
+++ b/src/Slice/Grammar.cpp
@@ -165,6 +165,7 @@
#include <Slice/GrammarUtil.h>
#include <IceUtil/UUID.h>
+#include <cstring>
#ifdef _MSC_VER
// I get these warnings from some bison versions:
diff --git a/src/Slice/Grammar.y b/src/Slice/Grammar.y
index 42733a7..4f537ad 100644
--- a/src/Slice/Grammar.y
+++ b/src/Slice/Grammar.y
@@ -11,6 +11,7 @@
#include <Slice/GrammarUtil.h>
#include <IceUtil/UUID.h>
+#include <cstring>
#ifdef _MSC_VER
// I get these warnings from some bison versions:
diff --git a/src/Slice/Parser.cpp b/src/Slice/Parser.cpp
index 45ae163..74a4802 100644
--- a/src/Slice/Parser.cpp
+++ b/src/Slice/Parser.cpp
@@ -10,6 +10,7 @@
#include <IceUtil/Functional.h>
#include <Slice/Parser.h>
#include <Slice/GrammarUtil.h>
+#include <cstring>
#ifdef __BCPLUSPLUS__
# include <iterator>
#endif
diff --git a/src/Slice/Preprocessor.cpp b/src/Slice/Preprocessor.cpp
index ead6a4b..6ad2cc3 100644
--- a/src/Slice/Preprocessor.cpp
+++ b/src/Slice/Preprocessor.cpp
@@ -13,6 +13,7 @@
#include <fstream>
#include <sys/types.h>
#include <sys/stat.h>
+#include <cstring>
#ifndef _WIN32
diff --git a/src/slice2javae/Gen.cpp b/src/slice2javae/Gen.cpp
index ff8dcfc..77c8522 100644
--- a/src/slice2javae/Gen.cpp
+++ b/src/slice2javae/Gen.cpp
@@ -14,6 +14,7 @@
#include <IceUtil/Iterator.h>
#include <limits>
+#include <cstring>
using namespace std;
using namespace Slice;