使用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
任何线索?
答案 0 :(得分:0)
米哈伊尔的答案解决了这个问题
尝试定义__STDC_FORMAT_MACROS或将-D__STDC_FORMAT_MACROS添加到g ++标志 在Makefile中
非常感谢
贝恩德