免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4086 | 回复: 5
打印 上一主题 下一主题

HP-UX下gcc编译器报/usr/include/sys/ipc.h出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-07 18:07 |只看该作者 |倒序浏览
系统环境为:
HP-UX INDEX01 B.11.23 U ia64 (ta)
gcc version 3.4.4编译器
源程序中的头文件包含顺序如下:
#include <errno.h>
#include <time.h>
#include <stdio.h>
#include <signal.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <sys/wait.h>
由于要用到共享内存和信号量,所以包含了上叙文件,结果编译器报错了,错误提示如下:

/usr/include/sys/ipc.h:51: error: parse error before "cid_t"
/usr/include/sys/ipc.h:56: error: parse error before '}' token
In file included from shmISIN.c:5:
/usr/include/sys/shm.h:82: error: field `shm_perm' has incomplete type
In file included from shmISIN.c:6:
/usr/include/sys/sem.h:91: error: field `sem_perm' has incomplete type

程序采用cc编译器是没有任何问题的,但是由于程序的其他模块必须采用gcc编译器,所以必须得解决这个问题,以前在使用信号量时也曾遇到这个问题,当时我怀疑是系统的头文件中的宏定义出现递归了,把#include <sys/sem.h>注释掉了就可以了,但是共享内存的那个注释掉就出现定义找不到的问题了。
现在项目时间紧急,哪位大侠能够帮我的,不胜感激!分数如果不够,还可以再加,先谢谢了!

论坛徽章:
0
2 [报告]
发表于 2006-07-07 18:33 |只看该作者
#include <sys/types.h>

论坛徽章:
0
3 [报告]
发表于 2006-07-17 09:34 |只看该作者
试过,也不行呀

论坛徽章:
0
4 [报告]
发表于 2006-07-17 13:01 |只看该作者
问题解决了,虽然用的方法很不好,但是总算解决了,这里把我解决的方法贴出来,供遇到和我同样问题的朋友参考:
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就报系统文件错误。

论坛徽章:
0
5 [报告]
发表于 2006-07-18 12:11 |只看该作者
呵呵,今天终于找到了真正的原因,yjf7888()()()()()()()() 说的没错,确实如此,我今天已经改过来了,采用的方法是在引用的前面加:#include "/usr/include/sys/types.h" 直接引用系统的头文件,而不是gcc的头文件

论坛徽章:
0
6 [报告]
发表于 2006-07-18 12:12 |只看该作者
是gcc优先使用gcc目录下的types.h(如/usr/local/lib/gcc/ia64-hp-hpux11.20/3.4.2/include/sys/types.h
), 而不是/usr/include/sys/types.h
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP