gcc编译错误仅适用于GCC 4.4.x中的SCNu64

时间:2017-10-07 14:00:07

标签: gcc

使用GCC 4.4.7

编译hostscope(http://www.maier-komor.de/hostscope.html)时出错

OS:

[xtrnaw7@centos69 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

使用的GCC版本:

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

[xtrnaw7@centos69 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
[xtrnaw7@centos69 hostscope-V2.1]$ 

gcc抱怨的是

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');

此源文件中的包含

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

SCNu64在inttypes.h中定义

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

hostscope与其他GCC版本编译时没有错误,例如

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

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

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

但不是GCC 4.4.7

任何线索?

1 个答案:

答案 0 :(得分:0)

米哈伊尔的答案解决了这个问题

  
    

尝试定义__STDC_FORMAT_MACROS或将-D__STDC_FORMAT_MACROS添加到g ++标志     在Makefile中

  

非常感谢

贝恩德