Pro*Cのプリコンパイル作業してたら、ヘッダが見つからないというエラーが出たのでその対処内容残しとく。
PCC-F-02102, Fatal error while doing C preprocessing Error at line 30, column 10 in file /usr/include/sched.h 30 #include <stddef.h> 30 .........1 30 PCC-S-02015, unable to open include file 以降、大量のエラーが続く
環境は、CentOS 6.2、Oracleクライアント10.2。
確かに、stddef.hは/usr/includeにはない。
$ ls /usr/include/stddef.h ls: cannot access /usr/include/stddef.h: そのようなファイルやディレクトリはありません
調べてみたら、pcscfg.cfgの設定が原因。
$ORACLE_HOME/precomp/admin/pcscfg.cfgの設定は以下。
sys_include=(/build/s630/precomp/public,/usr/include,/opt/gcc33/lib64/gcc-lib/x86_64-suse-linux/3.3/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/include) ltype=short define=__x86_64__
Pro*Cはsys_includeの設定ディレクトリにシステムのヘッダ探しに行くようだが、指定されてたディレクトリにはstddef.hがなかった。
$ include_dir=/build/s630/precomp/public,/usr/include,/opt/gcc33/lib64/gcc-lib/x86_64-suse-linux/3.3/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/include $ for dir in $(echo $include_dir|sed "s/,/ /g") > do > ls $dir/stddef.h > done ls: cannot access /build/s630/precomp/public/stddef.h: そのようなファイルやディレクトリはありません ls: cannot access /usr/include/stddef.h: そのようなファイルやディレクトリはありません ls: cannot access /opt/gcc33/lib64/gcc-lib/x86_64-suse-linux/3.3/include/stddef.h: そのようなファイルやディレクトリはありません ls: cannot access /usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include/stddef.h: そのようなファイルやディレクトリはありません ls: cannot access /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/include/stddef.h: そのようなファイルやディレクトリはありません
環境によって置かれてるディレクトリは変わると思うけど、自分の環境だと、stddef.hは以下にあった。
$ ls -l /usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stddef.h -rw-r--r--. 1 root root 12542 2月 22 00:13 2013 /usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stddef.h
上記のstddef.hが置かれているディレクトリをpcscfg.cfgのsys_includeに追加することで、無事にプリコンパイル通った。