Ubuntu上pro*c预编译时找不到stddef.h

本文描述了在Ubuntu 11.04上使用Oracle的pro*C预编译时遇到找不到stddef.h和size_t未定义的问题。通过使用`locate`命令查找stddef.h,发现其位于多个路径下,但预编译配置文件pcscfg.cfg中包含的路径不正确。解决方案是更新sys_include设置,将Ubuntu特有的路径添加到配置中,从而成功预编译。

今天在ubuntu 11.04上用proc预编译一个pc文件的时候刷刷地出了几屏错误信息,最前面的部分如下:


Pro*C/C++: Release 11.2.0.1.0 - Production on Thu Mar 15 22:07:26 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /opt/app/oracle/product/11.2.0/precomp/admin/pcscfg.cfg

Error at line 30, column 10 in file /usr/include/sched.h
#include <stddef.h>
.........1
PCC-S-02015, unable to open include file
Syntax error at line 201, column 37, file /usr/include/bits/sched.h:
Error at line 201, column 37 in file /usr/include/bits/sched.h
extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
....................................1
PCC-S-02201, Encountered the symbol "__setsize" when expecting one of the follow
ing:

   , )

看这个错误信息,一是找不到stddef.h,二是size_t未定义。

用locate命令查找stddef.h,可以找到如下stddef.h:

/usr/include/linux/stddef.h
/usr/lib/syslinux/com32/include/stddef.h
/usr/lib/syslinux/com32/include/bitsize/stddef.h
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5/include/stddef.h
/usr/src/linux-headers-2.6.38-8/include/linux/stddef.h
/usr/src/linux-headers-2.6.38-8-generic/include/linux/stddef.h

没有在/usr/include下的,那就要看看pcscfg.cfg里面有没有包含上述的几个目录:

cat /opt/app/oracle/product/11.2.0/precomp/admin/pcscfg.cfg
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.0/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include)
ltype=short
define=__x86_64__
可以看出它包含了redhat, suse linux的路径,而ubuntu上有所不同。比较上面找到的记录stddefh的路径,第4个和原来包含的  redhat,suselinux的路径类似。 检查该stddef.h,也确实包含size_t的定义。因此就把sys_include 改为:

sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5/include)


再次预编译,不再有上面的错误。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值