sys/types.h和linux/types.h的冲突重新声明

3

我的程序出现了编译错误:

/usr/include/sys/types.h:46: error: conflicting declaration ‘typedef __loff_t loff_t’
/usr/include/linux/types.h:30: error: ‘loff_t’ has a previous declaration as ‘typedef __kernel_loff_t loff_t’
/usr/include/sys/types.h:62: error: conflicting declaration ‘typedef __dev_t dev_t’
/usr/include/linux/types.h:13: error: ‘dev_t’ has a previous declaration as ‘typedef __kernel_dev_t dev_t’
/usr/include/time.h:105: error: conflicting declaration ‘typedef void* timer_t’
/usr/include/linux/types.h:22: error: ‘timer_t’ has a previous declaration as ‘typedef __kernel_timer_t timer_t’
/usr/include/sys/types.h:198: error: conflicting declaration ‘typedef long int int64_t’
/usr/include/linux/types.h:98: error: ‘int64_t’ has a previous declaration as ‘typedef __s64 int64_t’
/usr/include/sys/types.h:204: error: conflicting declaration ‘typedef long unsigned int u_int64_t’
/usr/include/linux/types.h:97: error: ‘u_int64_t’ has a previous declaration as ‘typedef __u64 u_int64_t’
/usr/include/sys/select.h:78: error: conflicting declaration ‘typedef struct fd_set fd_set’
/usr/include/linux/types.h:12: error: ‘fd_set’ has a previous declaration as ‘typedef struct __kernel_fd_set fd_set’
/usr/include/sys/types.h:235: error: conflicting declaration ‘typedef __blkcnt_t blkcnt_t’
/usr/include/linux/types.h:124: error: ‘blkcnt_t’ has a previous declaration as ‘typedef long unsigned int blkcnt_t’

在我的代码中,我没有包含任何types.h文件,所以我怀疑是那些第三方.h文件包含了sys/types.hlinux/type.h。该如何解决这个问题?

你包含了哪些头文件? - Fred Foo
哪个版本/发行版的Linux? - trojanfoe
请包含libpcan.h,它是Linux的CAN总线API,并且还包括所有QT相关内容,如qthread、qstring等。使用Fedora 11。 - user1157977
1个回答

1

这似乎是一个常见的问题,但是提到的解决方案却大相径庭。

一个合理的解决方案是在libpcan.h或Qt头文件之前自己包含其中一个头文件。我无法确定哪一个,所以你需要尝试两个。如果这样做失败了,请尝试同时包含两个头文件,并按照不同的顺序进行尝试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接