ORACLE 10.2 Pro * C预编译器没有读取头文件

时间:2008-11-28 13:59:22

标签: oracle oracle-pro-c

我正在使用Oracle 10.2和AIX 5.2预编译包含Pro * C代码的C程序

Oracle预编译器读取$ORACLE_HOME/precomp/admin/pcscfg.cfg file,其中包含sys_include变量的定义(设置为/usr/include)。

Pro * C编译器抱怨它不知道size_t类型是什么,并且使用size_t类型的Oracle头文件报告错误。

以下是sqlcpr.h文件中报告的示例错误:

extern void sqlglm( char*, size_t*, size_t* );
...........................1
PCC-S-02201, Encountered the symbol "size_t" when expecting one of the following

size_tstdio.h目录的/usr/include头文件中定义。在我添加stdio.h标题之前,我在example.pc文件中包含sqlcpr.h标题。

我发出proc命令如下:

proc iname=example parse=full

任何想法我做错了什么?

8 个答案:

答案 0 :(得分:8)

来自Metalink

PCC-S-02201, Encountered the symbol "size_t" when expecting one of the 
following
:
   ... auto, char, const, double, enum,  float, int, long,
   ulong_varchar, OCIBFileLocator OCIBlobLocator,
   OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval,
   OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register,
   short, signed, sql_context, sql_cursor, static, struct,
   union, unsigned, utext, uvarchar, varchar, void, volatile,
   a typedef name, exec oracle, exec oracle begin, exec,
   exec sql, exec sql begin, exec sql type, exec sql var,
The symbol "enum," was substituted for "size_t" to continue.
Syntax error at line 88, column 7, file /usr/include/gconv.h:
Error at line 88, column 7 in file /usr/include/gconv.h
                                  size_t *);
  

解决方案描述

     

未设置'sys_include'和'include'预编译器选项   正确。设置'sys_include'和'include'预编译器选项   在位于$ ORACLE_HOME / precomp / admin或的pcscfg.cfg文件中   在调用'proc'时在命令行中包含。

     

例如,以下是推荐的正确设置变量的方法:

     

运行以下命令以获取编译器位置:

     

gcc -v

     

阅读/usr/lib/gcc-lib/i386-redhat-linux7/2.96/specs中的规范   gcc版本2.96 20000731(Red Hat Linux 7.3 2.96-128)

     

使用上面返回的路径(删除规范并替换为include)

sys_include=($ORACLE_HOME/precomp/public,
             /usr/lib/gcc-lib/i386-redhat-linux7/2.96/include, 
             /usr/include)

include=(/u02/app/oracle/product/8.1.5/precomp/public)
include=(/u02/app/oracle/product/8.1.5/rdbms/demo)
include=(/u02/app/oracle/product/8.1.5/network/public)
include=(/u02/app/oracle/product/8.1.5/plsql/public)

我猜测同时包含sysinclude和include的部分是你的问题。

答案 1 :(得分:4)

您必须确保设置包含搜索路径,以便Pro * C以正确的顺序包含所有需要的目录。

例如,在CentOS 6.5上,我指定了以下顺序(在pcscfg.cf中):

sys_include=$ORACLE_HOME/sdk/include
sys_include=/usr/include
sys_include=/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include
sys_include=/usr/include/linux
ltype=short
define=__x86_64__

proc$ORACLE_HOME/precomp/admin/pcscfg.cfg读取此配置文件。

显然,Oracle安装程序编写的默认文件通常不是最理想的,因为例如列出不存在的GCC路径和/或使用有问题的包含路径顺序。

使用不同的顺序,我得到相同的size_t相关错误消息(将前4行换算为(1,2,4,3)时)。

当将前4行置换为(1,3,2,4)并包括<limits.h>时,proc甚至进入一个分配无限循环的内存,直到它被OOM杀手杀死。< / p>

作为一种解决方法,您还可以在sys_include命令行中指定proc选项,例如:

lines=yes \
code=ANSI_C \
sqlcheck=full \
parse=full \
sys_include=$(ORACLE_HOME)/precomp/public \
sys_include=/usr/include \
sys_include=/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include \
sys_include=/usr/include/linux

答案 2 :(得分:1)

当我使用我的pcscfg.cfg文件时,有两点值得注意。

1请记住它不支持“空格”,因此任何包含空格的路径都应以“短”方式编写。例如:SYS_INCLUDE=D:\Progra~1\Micros~1.0\VC\include 您可以在Windows中使用dir / x来获取名称的简短版本

2看来,至少在我的情况下,INCLUDE应该在所有这些选项之前编写。 I.E.如果

define=(WIN32_LEAN_AND_MEAN)
parse=full
SYS_INCLUDE=D:\Progra~1\Micros~1.0\VC\include

不起作用,请尝试

define=(WIN32_LEAN_AND_MEAN)
SYS_INCLUDE=D:\Progra~1\Micros~1.0\VC\include
parse=full

相反。

答案 3 :(得分:0)

我有类似的问题(“PCC-S-02201,遇到符号......”)。我听了上面的两条建议。

  • 检查sys_include并确保目录路径是编译器实际设置为使用的路径。 Pro * C使用的默认值通常不存在。使用gcc -v -c <prog.c>编译“Hello World”计划并检查COMPILER_PATH
  • 我调整了选项顺序并将sys_include提升到了顺序(不确定是否重要,但仍然如此。)

所以PCC-S-02201离开了。

答案 4 :(得分:0)

我修改了/ usr / include / linux之前的其他内容。这清除了无法找到stddef.h并且不知道size_t是什么。将它放在/ usr / include旁边只修复了前者。

修改了pcscfg.cfg:

sys_include =(的的/ usr /包括/ Linux中, $ ORACLE_HOME /预补偿/公共,在/ usr /包括,/ usr / lib中/ GCC / I386的红帽-LINUX / 4.1.1 /包括,/ usr / lib中/ GCC / I386的红帽-LINUX / 3.4.5 /包括,/ usr / lib中/ GCC-LIB / I386的红帽-LINUX / 3.2.3 /包括,/ usr / lib中/ GCC / i586- SUSE-LINUX / 4.1.2 /包括,/ usr / lib中/ GCC / i586的-SUSE-LINUX / 4.3 /包括) L-型=短

(CentOS 6.3,oracle 11g)

答案 5 :(得分:0)

将sys_include用于包含环境变量或Visual Studio变量的路径。如果路径是简单路径,请使用&#34; include&#34;,否则使用&#34; sys_include&#34;

我在Visual Studio 2013上遇到此问题,为了编译.pc文件,通过上述更改,所有工作都已完成。

答案 6 :(得分:0)

将一个编译标志行添加到pcscfg.cfg以使Oracle的预编译器编译时没有系统头文件语法错误:

define=_POSIX_C_SOURCE

就是这样。它现在应该可以预编译而不会出错。

答案 7 :(得分:0)

我遇到了同样的问题:

[me@somesys:~/proC]$ proc sys_include='(/usr/include,/usr/include/linux,/usr/include/c++/4.8.2/x86_64-redhat-linux,/usr/include/c++/4.8.2/tr1,/usr/include/c++/4.8.2)' copy.pc

Pro*C/C++: Release 12.1.0.2.0 - Production on Thu Jun 6 17:47:11 2019

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

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

Syntax error at line 307, column 3, file /usr/include/libio.h:
Error at line 307, column 3 in file /usr/include/libio.h
  size_t __pad5;
..1
PCC-S-02201, Encountered the symbol "size_t" when expecting one of the following
:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
...

我按照yogmk的建议做了

[me@somesys:~/proC]$ gcc -v -c borrame.c
Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
COLLECT_GCC_OPTIONS='-v' '-c' '-mtune=generic' '-march=x86-64'
 /usr/libexec/gcc/x86_64-redhat-linux/4.8.5/cc1 -quiet -v borrame.c -quiet -dumpbase borrame.c -mtune=generic -march=x86-64 -auxbase borrame -version -o /tmp/cc2WTuu6.s
GNU C (GCC) version 4.8.5 20150623 (Red Hat 4.8.5-36) (x86_64-redhat-linux)
        compiled by GNU C version 4.8.5 20150623 (Red Hat 4.8.5-36), GMP version 6.0.0, MPFR version 3.1.1, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include
 /usr/local/include
 /usr/include
End of search list.
GNU C (GCC) version 4.8.5 20150623 (Red Hat 4.8.5-36) (x86_64-redhat-linux)
...

但是我不是COMPILER_PATH,而是依次复制了#include <...> search starts here:之后的非空目录,并且可以正常工作!

[me@somesys:~/proC]$ proc sys_include='(/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include,/usr/include)' copy.pc

Pro*C/C++: Release 12.1.0.2.0 - Production on Thu Jun 6 17:54:50 2019

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

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

[me@somesys:~/proC]$

希望它对任何人都有帮助。