环境: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.mkPROC=proc
GCC=gccBINDIR=$(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/libIFLAG=-I$(HOME)/include $(ORAIFLAG)
LFLAG=-L$(HOME)/lib $(ORALFLAG) -lclntshPROCFLAGS=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/lib3,在自己的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可执行程序。
如何设置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.mkPROC=proc
GCC=gccBINDIR=$(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/libIFLAG=-I$(HOME)/include $(ORAIFLAG)
LFLAG=-L$(HOME)/lib $(ORALFLAG) -lclntshPROCFLAGS=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/lib3,在自己的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可执行程序。
test.c:(.text+0x1bc):undefined reference to 'sqlcxt'
collect2: ld returned 1 exit status
make: *** [test] Error 1
proc mypc.pc ONAME=t1.c
gcc -o t1 t1.c -lclntsh -I$ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib
例如:cd $(ORACLE_HOME)报command not found,去掉括号就正常了。
这里有一个gnu make使用文档
[oracle@dl388 bz_sdpt]$ proc sdptmain.pcPro*C/C++: Release 10.2.0.1.0 - Production on Wed Aug 10 10:12:48 2011Copyright (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.cfgSyntax 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_terminalError at line 0, column 0 in file sdptmain.pc
PCC-F-02102, Fatal error while doing C preprocessing
这样写上面的错误就没有了,问题是加上这个参数会有什么影响?
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 .oall: sdpt_bz sdpt_nosdpt_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