diff --git a/makefile b/makefile
index 5f5f213a2e3e69b462ed9299382b526eac4753ae..a8d03184b1738b82f257cadec0f8056c187d8f30 100644
--- a/makefile
+++ b/makefile
@@ -11,9 +11,9 @@ BIN = mojitos
 BINP = mojitos_prometeus
 PREFIX = /usr/local
 
-# CC = g++
-# CPPFLAGS = -std=c++20 -Wall -Wextra -Wpedantic -Wno-unused-function -I./lib $(NVML_IFLAGS)
-CC = clang
+CC = g++
+CPPFLAGS = -std=c++20 -Wall -Wextra -Wpedantic -Wno-unused-function -I./lib $(NVML_IFLAGS)
+CC = gcc
 CPPFLAGS = -std=gnu99 -Wall -Wextra -Wpedantic -Wno-unused-function -I./lib $(NVML_IFLAGS)
 
 CFLAGS = $(CPPFLAGS) -O3 -Werror
diff --git a/src/counters.c b/src/counters.c
index 8013ff863757b2f614094cd96dc09e12776467c8..1266a07a64314b7318d8254f40a027e1b60de6e4 100644
--- a/src/counters.c
+++ b/src/counters.c
@@ -57,8 +57,8 @@ void *show_all_counters(void *none1, size_t none2)
 
 void perf_type_key(__u32 **perf_type, __u64 **perf_key, int *indexes, int nb)
 {
-    *perf_type = malloc(nb * sizeof(__u32));
-    *perf_key  = malloc(nb * sizeof(__u64));
+    *perf_type = (__u32*) malloc(nb * sizeof(__u32));
+    *perf_key  = (__u64*) malloc(nb * sizeof(__u64));
 
     for (int i = 0; i < nb; i++) {
         (*perf_key)[i]  = perf_static_info[indexes[i]].perf_key;
@@ -78,7 +78,7 @@ void perf_event_list(char *perf_string, int *nb_perf, int **perf_indexes)
         for (i = 0; i < nb_counter_option; i++) {
             if (strcmp(perf_static_info[i].name, token) == 0) {
                 (*nb_perf)++;
-                (*perf_indexes) = realloc(*perf_indexes, sizeof(int) * (*nb_perf));
+                (*perf_indexes) = (int*) realloc(*perf_indexes, sizeof(int) * (*nb_perf));
                 (*perf_indexes)[*nb_perf - 1] = i;
                 break;
             }
@@ -113,15 +113,15 @@ Counter *_init_counters(const int nb_perf, const __u32 *types, const __u64 *name
     pe.size = sizeof(struct perf_event_attr);
     pe.disabled = 1;
 
-    Counter *counters = malloc(sizeof(struct Counter));
+    Counter *counters = (Counter*) malloc(sizeof(struct Counter));
     counters->nbperf = nb_perf;
     counters->nbcores = nbcores;
-    counters->counters = malloc(nb_perf * sizeof(int *));
+    counters->counters = (int**) malloc(nb_perf * sizeof(int *));
 
     for (int i = 0; i < nb_perf; i++) {
         pe.type = types[i];
         pe.config = names[i];
-        counters->counters[i] = malloc(nbcores * sizeof(int));
+        counters->counters[i] = (int*) malloc(nbcores * sizeof(int));
 
         for (unsigned int core = 0; core < nbcores; core++) {
             counters->counters[i][core] = perf_event_open(&pe, -1, core, -1, PERF_FLAG_FD_CLOEXEC);
@@ -207,8 +207,8 @@ unsigned int init_counters(char *args, void **state)
     free(perf_key);
 
     fd->perf_indexes = perf_indexes;
-    fd->counters_values = malloc(nb_perf * sizeof(uint64_t));
-    fd->tmp_counters_values = malloc(nb_perf * sizeof(uint64_t));
+    fd->counters_values = (uint64_t*) malloc(nb_perf * sizeof(uint64_t));
+    fd->tmp_counters_values = (uint64_t*) malloc(nb_perf * sizeof(uint64_t));
     start_counters(fd);
     _get_counters(fd, fd->counters_values);
     *state = (void *) fd;
diff --git a/src/likwid.c b/src/likwid.c
index bf1ea148a89e239e58c8a13fb9b4f2ed192d752a..0f72bbcf8ad463c7bf1eb0c335928db7b459f21e 100644
--- a/src/likwid.c
+++ b/src/likwid.c
@@ -85,15 +85,15 @@ void *show_all_likwid(void *none1, size_t none2)
 
 unsigned int init_likwid(char *args, void **state)
 {
-  Likwid *likwid = malloc(sizeof(struct Likwid));
+  Likwid *likwid = (Likwid*) malloc(sizeof(struct Likwid));
   likwid->nbperf = 0;
   likwid->labels = NULL;
 
-  char *events = malloc(sizeof(char)*strlen(args)+1);
+  char *events = (char*) malloc(sizeof(char)*strlen(args)+1);
   strcpy(events, args);
   while(events != NULL) {
     likwid->nbperf++;
-    likwid->labels = realloc(likwid->labels, sizeof(char*)*likwid->nbperf);
+    likwid->labels = (char**) realloc(likwid->labels, sizeof(char*)*likwid->nbperf);
     likwid->labels[likwid->nbperf-1] = events;
     events = index(events, ',');
     if(events != NULL) {
@@ -125,7 +125,8 @@ unsigned int init_likwid(char *args, void **state)
   free(cpus);
 
   // Add eventset string to the perfmon module.
-  putenv("LIKWID_FORCE=1");
+  char env[] = "LIKWID_FORCE=1";
+  putenv(env);
   likwid->gid = perfmon_addEventSet(args);
   if (likwid->gid < 0) {
     printf("perfmon_addEventSet with %s\n", args);
diff --git a/src/load.c b/src/load.c
index 64502e587c1472e603d96d36f53a3068d67053e9..a38886d9e3da986b0648aa7cba29a9a323c20dea 100644
--- a/src/load.c
+++ b/src/load.c
@@ -32,7 +32,7 @@ char buffer[LOAD_BUFFER_SIZE];
 static int load_fid = -1;
 static uint64_t load_values[LOAD_VALUES_SIZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 static uint64_t tmp_load_values[LOAD_VALUES_SIZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-static char *stat = "/proc/stat";
+static const char *stat = "/proc/stat";
 
 void _get_load(uint64_t *results)
 {
diff --git a/src/memory_counters.c b/src/memory_counters.c
index 07cfd6007df30465d8431e4fa58362a03e07adc5..564fb9c9916705916047732504c9e60f570a6ab8 100644
--- a/src/memory_counters.c
+++ b/src/memory_counters.c
@@ -89,8 +89,8 @@ unsigned int get_memory_counters(uint64_t *results, void *ptr)
     MemoryCounters *counters = (MemoryCounters *)ptr;
     fseek(counters->file, 0, SEEK_SET);
     Parser parser = {.storage = (GenericPointer)results,
-                     .capacity = 1,
                      .nb_stored = 0,
+                     .capacity = 1,
                      .storage_struct_size = sizeof(uint64_t) * counters->count,
                      .keys = counters->keys,
                      .nb_keys = counters->count,
diff --git a/src/mojitos.c b/src/mojitos.c
index f912d9b3d04a1f57bebb679c042cacc327f81753..52be05723e1c0d28354b9b37fc0fb7ac4d128b7f 100644
--- a/src/mojitos.c
+++ b/src/mojitos.c
@@ -46,21 +46,25 @@ Optparse opts[NB_OPT + 1] = {
         .longname = "freq", .shortname = 'f', .argtype = OPTPARSE_REQUIRED,
         .usage_arg = "<freq>",
         .usage_msg = "set amount of measurements per second.",
+	.fn = NULL,
     },
     {
         .longname = "time", .shortname = 't', .argtype = OPTPARSE_REQUIRED,
         .usage_arg = "<time>",
         .usage_msg = "set duration value (seconds). If 0, then loops infinitely.",
+	.fn = NULL,
     },
     {
         .longname = "option", .shortname = 'o', .argtype = OPTPARSE_REQUIRED,
         .usage_arg = "<output file> or <port number>",
         .usage_msg = "specify a log file for MojitO/S or a port number for prometeus_mojitO/S.",
+	.fn = NULL,
     },
     {
         .longname = "overhead-stats", .shortname = 's', .argtype = OPTPARSE_NONE,
         .usage_arg = NULL,
         .usage_msg = "enable overhead statistics (nanoseconds).",
+	.fn = NULL,
     },
 };
 
@@ -150,7 +154,7 @@ int main(int argc, char **argv)
     signal(SIGTERM, flush);
     signal(SIGINT, flush);
 
-    char **save = malloc((argc+1)*sizeof(char*));
+    char **save = (char**) malloc((argc+1)*sizeof(char*));
     memcpy(save, argv, (argc+1)*sizeof(char*));
     
     int opt;
diff --git a/src/network.c b/src/network.c
index ef1151572028a728d815bedfd5818b4c577c3c52..54c5f3d4cab6aa74b731e0def0b63aaf4cef526a 100644
--- a/src/network.c
+++ b/src/network.c
@@ -30,8 +30,8 @@
 #define NB_MAX_DEV 8
 #define NB_SENSOR 4
 
-static char *route = "/proc/net/route";
-char *_labels_network[NB_SENSOR] = {
+static const char *route = "/proc/net/route";
+const char *_labels_network[NB_SENSOR] = {
     "%s:rxp",
     "%s:rxb",
     "%s:txp",
@@ -98,14 +98,14 @@ unsigned int init_network(char *dev, void **ptr)
         exit(1);
     }
 
-    char *filenames[] = {
+    const char *filenames[] = {
         "/sys/class/net/%s/statistics/rx_packets",
         "/sys/class/net/%s/statistics/rx_bytes",
         "/sys/class/net/%s/statistics/tx_packets",
         "/sys/class/net/%s/statistics/tx_bytes",
     };
 
-    struct Network *state = malloc(sizeof(struct Network));
+    struct Network *state = (struct Network *) malloc(sizeof(struct Network));
     memset(state, '\0', sizeof(*state));
 
     if (strcmp(dev, "X") == 0) {
diff --git a/src/rapl.c b/src/rapl.c
index 880c9cd8cf070f196472b5df4b0ab67719ec747d..fce6b2b98635df1f205f77e369dea2d14a53e67f 100644
--- a/src/rapl.c
+++ b/src/rapl.c
@@ -37,7 +37,7 @@ char *get_rapl_string(const char *filename)
         return NULL;
     }
 
-    char *result = malloc(MAX_HEADER);
+    char *result = (char*) malloc(MAX_HEADER);
     int nb = read(fd, result, MAX_HEADER);
     close(fd);
     result[nb - 1] = 0;
@@ -69,11 +69,11 @@ typedef struct IntelRapl IntelRapl;
 void add_rapl_source(IntelRapl *rapl, char *name, uint64_t modulo, char *energy_uj)
 {
     rapl->nb += 1;
-    rapl->names = realloc(rapl->names, sizeof(char **)*rapl->nb);
-    rapl->fids = realloc(rapl->fids, sizeof(int *)*rapl->nb);
-    rapl->modulo = realloc(rapl->modulo, sizeof(uint64_t)*rapl->nb);
+    rapl->names = (char**) realloc(rapl->names, sizeof(char **)*rapl->nb);
+    rapl->fids = (int*) realloc(rapl->fids, sizeof(int *)*rapl->nb);
+    rapl->modulo = (uint64_t*) realloc(rapl->modulo, sizeof(uint64_t)*rapl->nb);
     
-    rapl->names[rapl->nb - 1] = malloc(strlen(name) + 1);
+    rapl->names[rapl->nb - 1] = (char*) malloc(strlen(name) + 1);
     strcpy(rapl->names[rapl->nb - 1], name);
     //printf("%s\n", energy_uj);
 
@@ -132,15 +132,15 @@ int add_rapl_source_from_str(IntelRapl *rapl, const char*name_base, const int i)
 unsigned int init_rapl(char *none, void **ptr)
 {
     UNUSED(none);
-    IntelRapl *rapl = malloc(sizeof(IntelRapl));
+    IntelRapl *rapl = (IntelRapl*)malloc(sizeof(IntelRapl));
     rapl->nb = 0;
     rapl->names = NULL;
     rapl->fids = NULL;
     rapl->modulo = NULL;
     
     char buffer[BUFFER_SIZE];
-    char *name_base = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/";
-    char *name_sub = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/intel-rapl:%d:%s/";
+    const char *name_base = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/";
+    const char *name_sub = "/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/intel-rapl:%d:%s/";
 
     for (unsigned int i = 0;; i++) {
 
@@ -157,8 +157,8 @@ unsigned int init_rapl(char *none, void **ptr)
       }
     }
 
-    rapl->values = calloc(rapl->nb, sizeof(uint64_t));
-    rapl->tmp_values = calloc(rapl->nb, sizeof(uint64_t));
+    rapl->values = (uint64_t*) calloc(rapl->nb, sizeof(uint64_t));
+    rapl->tmp_values = (uint64_t*) calloc(rapl->nb, sizeof(uint64_t));
 
     _get_rapl(rapl->values, rapl);
 
diff --git a/src/temperature.c b/src/temperature.c
index 1dc1099d15e73128ec9d5124b521b958ae9efe46..185367a7bdf4d0d7ae21ca5144dc8e75b3bd2c92 100644
--- a/src/temperature.c
+++ b/src/temperature.c
@@ -58,8 +58,8 @@ int get_string(char *filename, char *buffer, int max_size)
 void add_to_list(char ***list_name, char *source, int nb_elem)
 {
     //printf("Adds: %s\n", source);
-    *list_name = realloc(*list_name, (nb_elem + 1) * sizeof(char *));
-    (*list_name)[nb_elem] = malloc(strlen(source) + 1);
+    *list_name = (char**) realloc(*list_name, (nb_elem + 1) * sizeof(char *));
+    (*list_name)[nb_elem] = (char*) malloc(strlen(source) + 1);
     strcpy((*list_name)[nb_elem], source);
 
 }
@@ -92,7 +92,7 @@ void add_temperature_sensor(int id_rep, Temperature *state)
         add_to_list(&state->label_list, buffer_label, state->nb_elem);
 
         snprintf(buffer_filename, BUFFER_SIZE, "/sys/class/hwmon/hwmon%d/temp%d_input", id_rep, i);
-        state->fid_list = realloc(state->fid_list, (state->nb_elem + 1) * sizeof(int));
+        state->fid_list = (int*) realloc(state->fid_list, (state->nb_elem + 1) * sizeof(int));
         int fd = open(buffer_filename, O_RDONLY);
 
         if (fd < 0) {
@@ -112,7 +112,7 @@ void add_temperature_sensor(int id_rep, Temperature *state)
 unsigned int init_temperature(char *args, void **ptr)
 {
     UNUSED(args);
-    Temperature *state = malloc(sizeof(Temperature));
+    Temperature *state = (Temperature *) malloc(sizeof(Temperature));
     state->nb_elem = 0;
     state->label_list = NULL;
     state->fid_list = NULL;