今天在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)
再次预编译,不再有上面的错误。

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

被折叠的 条评论
为什么被折叠?



