2017-10-07 2 views
0

je reçois une erreur lors de la compilation hostscope (http://www.maier-komor.de/hostscope.html) en utilisant GCC 4.4.7gcc erreur de compilation pour SCNu64 dans GCC 4.4.x ne

OS:

[[email protected] hostscope-V2.1]$ uname -a 
Linux centos69 2.6.32-696.13.2.el6.x86_64 #1 SMP Thu Oct 5 21:22:16 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 

version GCC utilisé:

gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)

[[email protected] hostscope-V2.1]$ make 
g++ -MM -g -Wall -DWFC -DVERSION=\"V2.1\" linuxdisk.cc > build/linuxdisk.d 
g++ -g -O2 -Wall -DWFC -DVERSION=\"V2.1\" -c linuxdisk.cc -o build/linuxdisk.o 
linuxdisk.cc: In function ‘void read_diskinfo(HostScope*)’: 
linuxdisk.cc:187: error: expected ‘)’ before ‘SCNu64’ 
linuxdisk.cc:199: warning: spurious trailing ‘%’ in format 
linuxdisk.cc:199: warning: too many arguments for format 
make: *** [build/linuxdisk.o] Error 1 
[[email protected] hostscope-V2.1]$ 

la ligne gcc se plaint est

182   uint64_t ts = get_us_time(); 
183   char *at = buf; 
184   for (;at && *at;) { 
185     uint64_t nrd, nmrd, nsecrd, msrd, nwr, nmwr, nsecwr, mswr, niop, msio, wmsio; 
186     char dev[32]; 
187     int f = sscanf(at,"%*u %*u %31s %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 " %" SCNu64 "" 
188         , dev 
189         , &nrd 
190         , &nmrd 
191         , &nsecrd 
192         , &msrd 
193         , &nwr 
194         , &nmwr 
195         , &nsecwr 
196         , &mswr 
197         , &niop 
198         , &msio 
199         , &wmsio); 
200     if (f == 0) 
201       return; 
202     at = strchr(at,'\n'); 

Le inclut dans ce fichier source sont

#include <dirent.h> 
#include <errno.h> 
#include <fcntl.h> 
#include <inttypes.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 

Et SCNu64 est défini dans inttypes.h

[[email protected] hostscope-V2.1]$ grep SCNu64 /usr/include/inttypes.h 
# define SCNu64  __PRI64_PREFIX "u" 

Le hostscope compile sans erreur avec d'autres versions du CCG, comme

gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1)

gcc (GCC) 4.8.5 20.150.623 (Red Hat 4.8.5-16)

gcc (GCC) 5.3.1 20.160.406 (Red Hat 5.3.1-6)

mais pas avec GCC 4.4 .7

Des indices?

+0

Ve ry similaire à https://stackoverflow.com/questions/8132399/how-to-printf-uint64-t-fails-with-spurious-trailing-in-format/8132440#8132440. Essayez de définir __STDC_FORMAT_MACROS ou d'ajouter '-D__STDC_FORMAT_MACROS' aux drapeaux g ++ dans le Makefile. –

+0

Copie possible de [Comment imprimer uint64 \ _t? Échoue avec: "traînage fallacieux"% 'dans le format "] (https://stackoverflow.com/questions/8132399/how-to-printf-uint64-t-fails-with-spurious-trailing-in-format) – melpomene

Répondre

0

la réponse de Mikhail a résolu le problème

Essayez de définir __STDC_FORMAT_MACROS ou en ajoutant -D__STDC_FORMAT_MACROS à g ++ drapeaux dans le makefile

Merci beaucoup

Bernd