急求,ProC编译环境设置问题

宋哥 2011-08-09 03:53:27
环境:redhat linux rhel-server-5.5,orccle 10g release 10.2.0.1
如何设置pro*c的编译环境,网上查了很多文章,都不行,都是在Makefile的第一条实体命令的地方报错,不知道什么原因?
单独用proc编译proc程序,可以生成.c文件,但gcc编译不过。

按照附文进行操作,报错如下:
/home/oracle/etc/make.defines:24: *** missing separator. Stop.

求高手解决,在此先行谢过,100分送上。

==========================================================
附:网上的一篇文章

在linux环境下配置pro*c程序预编译参数

操作系统:

红帽子Linux 2.4.21-4.EL

数据库:oracle10g

配置步骤:

1,在$HOME下建立一个etc目录,在此目录下简历一个配置文件Make.defines文件,编辑该文件,写入以下内容:

include $(ORACLE_HOME)/precomp/lib/env_precomp.mk

PROC=proc
GCC=gcc

BINDIR=$(HOME)/bin

#oracle的include目录

ORAIFLAG=-I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/precomp/public -I$(ORACLE_HOME)/plsql/public

#oracle的库文件路径

ORALFLAG=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/precomp/lib -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/sqlplus/lib -L$(ORACLE_HOME)/network/lib -L$(ORACLE_HOME)/plsql/lib

IFLAG=-I$(HOME)/include $(ORAIFLAG)
LFLAG=-L$(HOME)/lib $(ORALFLAG) -lclntsh

PROCFLAGS=char_map=string

.SUFFIXES: .pc .c .o
.pc.c:
$(PROC) $(PROCFLAGS) iname=$*
rm *.lis
.pc.o:
$(PROC) $(PROCFLAGS) iname=$*
rm *.lis
$(GCC) $(IFLAG) -c $*.c
.c.o:
$(GCC) $(IFLAG) -c $*.c


2,确保.bash_profile文件中有如下环境变量配置:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

3,在自己的makefile文件中第一行写入如下语句:

include $(HOME)/etc/Make.defines

其他的makefile书写方式不变。

例子:

我有一个源程序test.pc,我的makefile文件内容如下:

include $(HOME)/etc/Make.defines
all:test
test:test.o
$(GCC) $? -o $@ $(LFLAG)
rm ./tp* ./*.c ./*.o
编译时执行:make test

产生test可执行程序。
...全文
380 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
宋哥 2011-08-27
  • 打赏
  • 举报
回复
makefile内容如下:

include $(ORACLE_HOME)/precomp/lib/env_precomp.mk

INCLUDE = -I. -I$(ORACLE_HOME)/rdbms/public

CC = gcc
PROC = proc
REMOVE = rm -f
FILES = sdptmain.o wu_proc.o loaddata.o
FILES1 = sdpt_no.o wu_proc.o loaddata.o

.SUFFIXES: .pc .c .o

all: sdpt_bz sdpt_no

sdpt_bz:$(FILES)
$(CC) -o sdpt_bz $(INCLUDE) $(FILES) $(LDPATHFLAG)$(LIBHOME) $(PROLDLIBS)

sdpt_no:$(FILES1)
$(CC) -o sdpt_no $(INCLUDE) $(FILES1) $(LDPATHFLAG)$(LIBHOME) $(PROLDLIBS)

.pc.o:
$(PROC) iname=$* parse=none
$(CC) $(INCLUDE) -c $*.c

.pc.c:
$(PROC) iname=$* parse=none

.c.o:
$(CC) $(INCLUDE) -c $*.c

宋哥 2011-08-10
  • 打赏
  • 举报
回复
proc sdptmain.pc parse=none
这样写上面的错误就没有了,问题是加上这个参数会有什么影响?
宋哥 2011-08-10
  • 打赏
  • 举报
回复
那个简单的测试程序用proc过了,但是,复杂的程序(程序本身没问题)proc过不了了
[oracle@dl388 bz_sdpt]$ proc sdptmain.pc

Pro*C/C++: Release 10.2.0.1.0 - Production on Wed Aug 10 10:12:48 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

System default option values taken from: /u01/app/oracle/product/10.1.0/db_1/pre
comp/admin/pcscfg.cfg

Syntax error at line 366, column 2, file /usr/include/curses.h:
Error at line 366, column 2 in file /usr/include/curses.h
bool _notimeout; /* no time out on function-key entry? */
.1
PCC-S-02201, Encountered the symbol "_Bool" when expecting one of the following:

} char, const, double, enum, float, int, long, ulong_varchar,
OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
struct, union, unsigned, utext, uvarchar, varchar, void,
volatile, a typedef name,


Syntax error at line 0, column 0, file sdptmain.pc:
Error at line 0, column 0 in file sdptmain.pc
PCC-S-02201, Encountered the symbol "<eof>" when expecting one of the following:

; : an identifier, end-exec, random_terminal

Error at line 0, column 0 in file sdptmain.pc
PCC-F-02102, Fatal error while doing C preprocessing

yanran_hill 2011-08-10
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2308035
这里有一个gnu make使用文档
宋哥 2011-08-10
  • 打赏
  • 举报
回复
奇怪的是以前环境变量$(ORACLE_HOME)这样使用没问题,现在这个版本的Linux确报错,必须去掉括号。
例如:cd $(ORACLE_HOME)报command not found,去掉括号就正常了。
宋哥 2011-08-10
  • 打赏
  • 举报
回复
昨天用命令行已实现编译,命令和参数和楼上yangqm22一样,谢谢yangqm22,我再进一步完善Makefile,完成后再贴上来。
iihero 2011-08-10
  • 打赏
  • 举报
回复
其实,楼主只要熟悉了gmake的使用,这些就都不是什么问题。
yangqm22 2011-08-09
  • 打赏
  • 举报
回复
我的是11g的比较简单。明天找个10个来试试
proc mypc.pc ONAME=t1.c
gcc -o t1 t1.c -lclntsh -I$ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib
宋哥 2011-08-09
  • 打赏
  • 举报
回复
找到原因了,在这些命令前加上TAB键开头就不报错了,但新的错误又产生了:
test.c:(.text+0x1bc):undefined reference to 'sqlcxt'
collect2: ld returned 1 exit status
make: *** [test] Error 1

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧