我正在尝试编译一个旧的软件,其中包括使用Oracle的ProC预编译器。
此软件在Solaris 10下使用Oracle 9运行,并使用proc
工具将.proc文件转换为.c文件,然后真正的编译器运行以将.c转换为.o
当我尝试为任何.proc文件运行proc时会发生这种情况。
# /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun define=PRE_COMP code=ansi_c mode=oracle def_sqlcode=yes threads=yes include=/usr/include include=../../../../../include include=../../../../../include/rpcsvc include=../../../../../aam/include include=../../../../../aam/libs/libavaora/include datahost.proc
Pro*C/C++: Release 9.2.0.6.0 - Production on Tue Jul 26 19:06:20 2011
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
System default option values taken from: /avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/admin/pcscfg.cfg
Segmentation Fault (core dumped)
然后我尝试使用truss
来查看实际发生的情况。
# truss -vall -wall -fall /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun define=PRE_COMP code=ansi_c mode=oracle def_sqlcode=yes threads=yes include=/usr/include include=../../../../../include include=../../../../../include/rpcsvc include=../../../../../aam/include include=../../../../../aam/libs/libavaora/include datahost.proc
这些是最后几行:
15775/1: close(10) = 0
15775/1: open("sys/uio.h", O_RDONLY) Err#2 ENOENT
15775/1: open("/usr/include/sys/uio.h", O_RDONLY) = 10
15775/1: fstat64(10, 0xFFBFB578) = 0
15775/1: d=0x00800000 i=16783 m=0100644 l=1 u=0 g=2 sz=2885
15775/1: at = Jul 26 18:50:45 GMT 2011 [ 1311706245 ]
15775/1: mt = Mar 13 10:41:10 GMT 2009 [ 1236940870 ]
15775/1: ct = May 10 19:03:47 GMT 2011 [ 1305054227 ]
15775/1: bsz=8192 blks=6 fs=ufs
15775/1: brk(0x00A475B0) = 0
15775/1: brk(0x00A495B0) = 0
15775/1: fstat64(10, 0xFFBFB420) = 0
15775/1: d=0x00800000 i=16783 m=0100644 l=1 u=0 g=2 sz=2885
15775/1: at = Jul 26 18:50:45 GMT 2011 [ 1311706245 ]
15775/1: mt = Mar 13 10:41:10 GMT 2009 [ 1236940870 ]
15775/1: ct = May 10 19:03:47 GMT 2011 [ 1305054227 ]
15775/1: bsz=8192 blks=6 fs=ufs
15775/1: ioctl(10, TCGETA, 0xFFBFB504) Err#25 ENOTTY
15775/1: read(10, " / *\t C o p y r i g h t".., 8192) = 2885
15775/1: brk(0x00A495B0) = 0
15775/1: brk(0x00A4B5B0) = 0
15775/1: brk(0x00A4B5B0) = 0
15775/1: brk(0x00A4D5B0) = 0
15775/1: brk(0x00A4D5B0) = 0
15775/1: brk(0x00A4F5B0) = 0
15775/1: read(10, 0x00A45A9C, 8192) = 0
15775/1: llseek(10, 0, SEEK_CUR) = 2885
15775/1: close(10) = 0
15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/mesg/pcpus.msb", O_RDONLY) = 10
15775/1: fcntl(10, F_SETFD, 0x00000001) = 0
15775/1: lseek(10, 0, SEEK_SET) = 0
15775/1: read(10, "1513 "011303\t\t\0\0\0\0".., 256) = 256
15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//slax/mesg/pxus.msb", O_RDONLY) Err#2 ENOENT
15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//slax/mesg/pxus.msb", O_RDONLY) Err#2 ENOENT
15775/1: close(10) = 0
15775/1: close(9) = 0
15775/1: close(8) = 0
15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/mesg/pcsus.msb", O_RDONLY) = 8
15775/1: fcntl(8, F_SETFD, 0x00000001) = 0
15775/1: lseek(8, 0, SEEK_SET) = 0
15775/1: read(8, "1513 "011303\t\t\0\0\0\0".., 256) = 256
15775/1: Incurred fault #6, FLTBOUNDS %pc = 0x0004CED8
15775/1: siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000
15775/1: Received signal #11, SIGSEGV [default]
15775/1: siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000
我对此的理解是,在阅读pcsus.msb
文件时,某些字符串处理出错了,并且它已经分段。
我尝试使用我在网上找到的不同pcsus.msb
个文件,有些文件发出了不同的错误,但我无法让它发挥作用。
核心文件的pstrack
输出也没有多大帮助。
# pstack core
core 'core' of 15803: /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun
0004ced8 pcs (0, ffbfeae4, 0, 1, ffbfd788, 2) + 37c
00044dfc pc2main (ffbfeb94, ffbff0ac, 1, 0, 544668, fe6ba518) + 1030
00416d70 lpmcall (51bac0, 51f660, 51bb68, c, ffbff780, 51b7a0) + 46c
004129a4 lpmpmai (4, ffbff534, d, ffbff74c, ff000000, 80808080) + 178
0003e688 main (d, ffbff74c, ffbff784, 513c00, ff2a0100, 0) + f0
0003e570 _start (0, 0, 0, 0, 0, 0) + 108
我可以尝试解决这个问题吗?
谢谢, 哈维尔
答案 0 :(得分:1)
我能够获得全新的Oracle 9i安装,并且其proc返回了有关“lloff_t”的错误:
PCC-S-02201, Encountered the symbol "lloff_t" when expecting one of the following
我在这里找到了解决方案:
http://www.orafaq.com/forum/t/59837/2/
将-D__sparc
添加到proc
命令行。
哈维尔