diff --git a/makefile b/makefile
index a8d03184b1738b82f257cadec0f8056c187d8f30..0714022d3c5f0e463a6506f2856220ff041e3489 100644
--- a/makefile
+++ b/makefile
@@ -11,8 +11,11 @@ BIN = mojitos
 BINP = mojitos_prometeus
 PREFIX = /usr/local
 
-CC = g++
-CPPFLAGS = -std=c++20 -Wall -Wextra -Wpedantic -Wno-unused-function -I./lib $(NVML_IFLAGS)
+# specific flags for g++
+# CC = g++
+# CPPFLAGS = -std=c++20 -Wall -Wno-error=write-strings -Wextra -Wpedantic -Wno-unused-function -I./lib $(NVML_IFLAGS)
+
+#works also with clang
 CC = gcc
 CPPFLAGS = -std=gnu99 -Wall -Wextra -Wpedantic -Wno-unused-function -I./lib $(NVML_IFLAGS)
 
diff --git a/src/counters.c b/src/counters.c
index 1266a07a64314b7318d8254f40a027e1b60de6e4..5dd28ad997cf0a6021712e6a0a3a6cc38254cfe4 100644
--- a/src/counters.c
+++ b/src/counters.c
@@ -230,7 +230,7 @@ unsigned int get_counters(uint64_t *results, void *ptr)
     return state->nbperf;
 }
 
-void label_counters(char **labels, void *ptr)
+void label_counters(const char **labels, void *ptr)
 {
     Counter *state = (Counter *) ptr;
 
diff --git a/src/counters.h b/src/counters.h
index 3186f1d7c80e5eb02256e8e67871ed98d0e3377e..4f082fe127ce8709eddb20840bb5615256b311d9 100644
--- a/src/counters.h
+++ b/src/counters.h
@@ -21,7 +21,7 @@
 unsigned int init_counters(char *, void **);
 unsigned int get_counters(uint64_t *results, void *);
 void clean_counters(void *);
-void label_counters(char **labels, void *);
+void label_counters(const char **labels, void *);
 void *show_all_counters(void *, size_t);
 
 Sensor counters = {
diff --git a/src/display_manager.c b/src/display_manager.c
index d485f07b85888b4a1751ad7cb2bbedeeaefa5e3b..9a7f6e1712de9863ffa199cad0c57e2f582b146d 100644
--- a/src/display_manager.c
+++ b/src/display_manager.c
@@ -8,7 +8,7 @@
 extern FILE *output;
 extern char* output_option;
 
-void init_manager(char** labels, int nb_sensors, int stat_mode) {
+void init_manager(const char** labels, int nb_sensors, int stat_mode) {
   if (output_option != NULL) {
     if ((output = fopen(output_option, "wb")) == NULL) {
       perror("fopen");
diff --git a/src/libmojitos.c b/src/libmojitos.c
index 89f3e76d65a355f5d6e691fdd1f1c48a2adc77b2..bd52068e29f2aea730e4b3cd716317ce7337906a 100644
--- a/src/libmojitos.c
+++ b/src/libmojitos.c
@@ -9,7 +9,7 @@
 #include "libmojitos.h"
 
 typedef unsigned int (*initializer_t)(char *, void **);
-typedef void (*labeler_t)(char **, void *);
+typedef void (*labeler_t)(const char **, void *);
 typedef unsigned int (*getter_t)(uint64_t *, void *);
 typedef void (*cleaner_t)(void *);
 
@@ -35,7 +35,7 @@ Optparse _moj_opts[NB_SENSOR_OPT + 1];
   
 unsigned int nb_sources = 0;
 unsigned int nb_sensors = 0; // might have multiple sensors per source
-char **labels = NULL;
+const char **labels = NULL;
 uint64_t *values = NULL;
 void **states = NULL;
 getter_t *getter = NULL;
@@ -63,7 +63,7 @@ void add_source(Sensor *cpt, char *arg)
     cleaner = (cleaner_t*) realloc(cleaner, nb_sources * sizeof(void *));
     cleaner[nb_sources - 1] = clean;
 
-    labels = (char**) realloc(labels, (nb_sensors + nb) * sizeof(char *));
+    labels = (const char**) realloc(labels, (nb_sensors + nb) * sizeof(char *));
     labeler(labels + nb_sensors, states[nb_sources - 1]);
 
     values = (uint64_t*) realloc(values, (nb_sensors + nb) * sizeof(uint64_t));
@@ -115,7 +115,7 @@ void moj_clean(void) {
     }
 }
 
-char **moj_labels(void) {
+const char **moj_labels(void) {
   return labels;
 }
 
diff --git a/src/libmojitos.h b/src/libmojitos.h
index 94347e2ed98c33bb1f6b283ff918f36bc5f2d869..2ee2448234844389dd5aa394aac89a10d68f969a 100644
--- a/src/libmojitos.h
+++ b/src/libmojitos.h
@@ -1,4 +1,4 @@
 int moj_init(char** argv);
 uint64_t* moj_get_values(void);
 void moj_clean(void);
-char **moj_labels(void);
+const char **moj_labels(void);
diff --git a/src/likwid.c b/src/likwid.c
index 0f72bbcf8ad463c7bf1eb0c335928db7b459f21e..9ce0027edc0c4e9a2f3b82c346a079d69bcb9f34 100644
--- a/src/likwid.c
+++ b/src/likwid.c
@@ -61,7 +61,7 @@ void _get_likwid(Likwid *likwid, uint64_t *values)
   }
 }
 
-void label_likwid(char **labels, void *ptr)
+void label_likwid(const char **labels, void *ptr)
 {
     Likwid *state = (Likwid *) ptr;
 
diff --git a/src/likwid.h b/src/likwid.h
index 7a529da1b8c1e74b362f82c91288f3efae11a0d6..c2e6b75e195aa8f76947ad4f860ad9b10142a072 100644
--- a/src/likwid.h
+++ b/src/likwid.h
@@ -21,7 +21,7 @@
 unsigned int init_likwid(char *, void **);
 unsigned int get_likwid(uint64_t *results, void *);
 void clean_likwid(void *);
-void label_likwid(char **labels, void *);
+void label_likwid(const char **labels, void *);
 void *show_all_likwid(void *, size_t);
 
 Sensor likwid = {
diff --git a/src/load.c b/src/load.c
index a38886d9e3da986b0648aa7cba29a9a323c20dea..c5684996362209a7e1be8644b4c5ca378ceeeb43 100644
--- a/src/load.c
+++ b/src/load.c
@@ -98,7 +98,7 @@ char *_labels[LOAD_VALUES_SIZE] = {
     "user", "nice", "system", "idle", "iowait", "irq",
     "softirq", "steal", "guest", "guest_nice"
 };
-void label_load(char **labels, void *none)
+void label_load(const char **labels, void *none)
 {
     UNUSED(none);
 
diff --git a/src/load.h b/src/load.h
index 333f778103ba0a330216e027676fb4a3140b2aeb..38d1395b785c9ec38a89081c585b5e6355c81e79 100644
--- a/src/load.h
+++ b/src/load.h
@@ -21,7 +21,7 @@
 unsigned int init_load(char *, void **);
 unsigned int get_load(uint64_t *results, void *);
 void clean_load(void *);
-void label_load(char **labels, void *);
+void label_load(const char **labels, void *);
 
 Sensor load = {
     .init = init_load,
diff --git a/src/manager.h b/src/manager.h
index 65ab8c8ca9b67905f783c7c09afa6576dd91b51c..d6f9885d0e0c098d62167f0827843eb6ed681992 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -1,4 +1,4 @@
-void init_manager(char** labels, int nb_sensors, int stat_mode);
+void init_manager(const char** labels, int nb_sensors, int stat_mode);
 void use_manager(struct timespec ts,
 		 const uint64_t* values, int nb_sensors,
 		 uint64_t stat_data);
diff --git a/src/memory.c b/src/memory.c
index 3356a82323d3ff8d4a79391c2bb0f36663ece9e2..799cf19c1ada3732374abb7337d47b97a89f16d6 100644
--- a/src/memory.c
+++ b/src/memory.c
@@ -83,7 +83,7 @@ unsigned int get_memory(uint64_t *results, void *none)
     return MEMORY_COUNT;
 }
 
-void label_memory(char **labels, void *none)
+void label_memory(const char **labels, void *none)
 {
     UNUSED(none);
     memcpy(labels, memory_labels, sizeof(char *) * MEMORY_COUNT);
diff --git a/src/memory.h b/src/memory.h
index 8a73fac5df8fcb2ab9672c6b99613f42813b0079..5a739404fa40df25ee5059924472f6dcb46f178a 100644
--- a/src/memory.h
+++ b/src/memory.h
@@ -21,7 +21,7 @@
 unsigned int init_memory(char *, void **);
 unsigned int get_memory(uint64_t *results, void *);
 void clean_memory(void *);
-void label_memory(char **labels, void *);
+void label_memory(const char **labels, void *);
 
 
 Sensor memory = {
diff --git a/src/memory_counters.c b/src/memory_counters.c
index 564fb9c9916705916047732504c9e60f570a6ab8..8b52fe55684cd408557f6fca4e2d9076bba31be5 100644
--- a/src/memory_counters.c
+++ b/src/memory_counters.c
@@ -101,7 +101,7 @@ unsigned int get_memory_counters(uint64_t *results, void *ptr)
     return counters->count;
 }
 
-void label_memory_counters(char **labels, void *ptr)
+void label_memory_counters(const char **labels, void *ptr)
 {
     MemoryCounters *counters = (MemoryCounters *)ptr;
     for (unsigned int i = 0; i < counters->count; i++) {
diff --git a/src/memory_counters.h b/src/memory_counters.h
index 27198faf9e560809885799229b5b6e24ff2587f3..11514e24787b1a942321300f5e8ef908b1de49fc 100644
--- a/src/memory_counters.h
+++ b/src/memory_counters.h
@@ -20,7 +20,7 @@
 
 unsigned int init_memory_counters(char *args, void **ptr);
 unsigned int get_memory_counters(uint64_t *results, void *ptr);
-void label_memory_counters(char **labels, void *ptr);
+void label_memory_counters(const char **labels, void *ptr);
 void clean_memory_counters(void *ptr);
 void *show_all_memory_counters(void *, size_t);
 
diff --git a/src/mojitos.c b/src/mojitos.c
index 52be05723e1c0d28354b9b37fc0fb7ac4d128b7f..668c9914df40469198cc28c3a9d659f5dc583843 100644
--- a/src/mojitos.c
+++ b/src/mojitos.c
@@ -210,7 +210,7 @@ int main(int argc, char **argv)
     struct timespec ts;
     struct timespec ts_ref;
 
-    char** labels = moj_labels();
+    const char** labels = moj_labels();
     init_manager(labels, nb_sensors, stat_mode);
 		 
     uint64_t stat_data = 0;
diff --git a/src/network.c b/src/network.c
index 54c5f3d4cab6aa74b731e0def0b63aaf4cef526a..31dc1a132dadd80a8860ecd8c27861f36797ccad 100644
--- a/src/network.c
+++ b/src/network.c
@@ -242,7 +242,7 @@ void clean_network(void *ptr)
     free(state);
 }
 
-void label_network(char **labels, void *ptr)
+void label_network(const char **labels, void *ptr)
 {
     struct Network *state = (struct Network *) ptr;
 
diff --git a/src/network.h b/src/network.h
index f6ba9a109ccd677932d2df08aa940f3779864442..c802fd4d3df573c497de4039d57f8b193f0ead06 100644
--- a/src/network.h
+++ b/src/network.h
@@ -21,7 +21,7 @@
 unsigned int init_network(char *, void **);
 unsigned int get_network(uint64_t *results, void *);
 void clean_network(void *);
-void label_network(char **labels, void *);
+void label_network(const char **labels, void *);
 
 Sensor network = {
     .init = init_network,
diff --git a/src/rapl.c b/src/rapl.c
index fce6b2b98635df1f205f77e369dea2d14a53e67f..557a0629854fad4cfe9d0691ca36ea6017fcc958 100644
--- a/src/rapl.c
+++ b/src/rapl.c
@@ -206,7 +206,7 @@ void clean_rapl(void *ptr)
 }
 
 
-void label_rapl(char **labels, void *ptr)
+void label_rapl(const char **labels, void *ptr)
 {
     IntelRapl *rapl = (IntelRapl *) ptr;
 
diff --git a/src/rapl.h b/src/rapl.h
index ef9c8b68365ce9d912067efc8d48a26918465629..cd5b2add9daaa760c0fd469a1be8278a168ea204 100644
--- a/src/rapl.h
+++ b/src/rapl.h
@@ -21,7 +21,7 @@
 unsigned int init_rapl(char *, void **);
 unsigned int get_rapl(uint64_t *results, void *);
 void clean_rapl(void *);
-void label_rapl(char **labels, void *);
+void label_rapl(const char **labels, void *);
 
 Sensor rapl = {
     .init = init_rapl,
diff --git a/src/temperature.c b/src/temperature.c
index 185367a7bdf4d0d7ae21ca5144dc8e75b3bd2c92..8f40468ede14972af3412d70a3b045cc9bf260d0 100644
--- a/src/temperature.c
+++ b/src/temperature.c
@@ -167,7 +167,7 @@ void clean_temperature(void *ptr)
     free(state);
 }
 
-void label_temperature(char **labels, void *ptr)
+void label_temperature(const char **labels, void *ptr)
 {
     Temperature *state = (Temperature *)ptr;
 
diff --git a/src/temperature.h b/src/temperature.h
index 129febc8075ab9e1834bd48316f1cdb423dcad25..52e01ace77b1634bf65659e32ec6b3ec067729e9 100644
--- a/src/temperature.h
+++ b/src/temperature.h
@@ -21,7 +21,7 @@
 unsigned int init_temperature(char *, void **);
 unsigned int get_temperature(uint64_t *results, void *);
 void clean_temperature(void *);
-void label_temperature(char **labels, void *);
+void label_temperature(const char **labels, void *);
 
 Sensor temperature = {
     .init = init_temperature,