diff --git a/include/network_ipc.h b/include/network_ipc.h
index e41493c..a4ce763 100644
--- a/include/network_ipc.h
+++ b/include/network_ipc.h
@@ -9,15 +9,19 @@
 #ifndef _IPC_H
 #define _IPC_H
 
+#include <stdbool.h>
+#include "swupdate_status.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
  * Be careful to include further headers here. This file is the interface
  * to external programs interfacing with SWUpdate as client, and further
  * headers are not exported.
  */
 
-#include <stdbool.h>
-#include "swupdate_status.h"
-
 #define IPC_MAGIC		0x14052001
 
 typedef enum {
@@ -78,4 +82,8 @@ int swupdate_image_write(char *buf, int size);
 int swupdate_async_start(writedata wr_func, getstatus status_func,
 				terminated end_func, bool dryrun);
 
+#ifdef __cplusplus
+}   // extern "C"
+#endif
+
 #endif
diff --git a/include/progress_ipc.h b/include/progress_ipc.h
index 2587cc7..2c242eb 100644
--- a/include/progress_ipc.h
+++ b/include/progress_ipc.h
@@ -11,6 +11,11 @@
 #include <stdbool.h>
 #include <swupdate_status.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 extern char* SOCKET_PROGRESS_PATH;
 
 /*
@@ -44,4 +49,9 @@ int progress_ipc_connect_with_path(const char *socketpath, bool reconnect);
 
 /* Retrieve messages from progress interface (it blocks) */
 int progress_ipc_receive(int *connfd, struct progress_msg *msg);
+
+#ifdef __cplusplus
+}   // extern "C"
+#endif
+
 #endif
diff --git a/include/swupdate_status.h b/include/swupdate_status.h
index a63595b..38811e3 100644
--- a/include/swupdate_status.h
+++ b/include/swupdate_status.h
@@ -8,6 +8,10 @@
 #ifndef _SWUPDATE_STATUS_H
 #define _SWUPDATE_STATUS_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
  * This is used to send back the result of an update.
  * It is strictly forbidden to change the order of entries.
@@ -33,4 +37,8 @@ typedef enum {
 	SOURCE_LOCAL
 } sourcetype;
 
+#ifdef __cplusplus
+}   // extern "C"
+#endif
+
 #endif
