- 论坛徽章:
- 0
|
问题解决了,虽然用的方法很不好,但是总算解决了,这里把我解决的方法贴出来,供遇到和我同样问题的朋友参考:
1。将系统的sys/ipc.h文件拷出来,在该文件首添加:
# ifndef _CMPTID_T
# define _CMPTID_T
typedef int32_t cid_t; /* For compartment IDs */
typedef cid_t cmpt_t;
# endif /* _CMPTID_T */
该定义实际上是在系统文件sys/types.h中对cid_t数据类型的定义
2。 在你的文件中#include <shm.h>语句前面包含以上被修改的ipc.h,也就是让它代替系统的ipc.h文件中的定义
然后你就可以正常使用了,虽然这个方法是很不好的,有很多隐患,但是目前我也没有时间去研究了,各位大侠有谁找到更好的办法麻烦告诉我。
给大家提供一点思路:我看过types.h,在我用的那个系统中有一个bug修正的说明,将#ifdef _INCLUDE_POSIX_SOURCE语句注释掉了,该判断刚好就是在cid_t结构定义的外层判断,所以我怀疑系统开发人员已经发现了数据类型cid_t未定义的bug,但是他的那种处理方式却不能够彻底解决问题。我觉得还是系统的头文件定义判断出现了某重递归,而gcc对这种现象的处理恰好有一个bug,最终就是cc可以编译过去,而gcc就报系统文件错误。 |
|