环境: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可执行程序。

解决方案 »

  1.   

    找到原因了,在这些命令前加上TAB键开头就不报错了,但新的错误又产生了:
    test.c:(.text+0x1bc):undefined reference to 'sqlcxt'
    collect2: ld returned 1 exit status
    make: *** [test] Error 1
      

  2.   

    我的是11g的比较简单。明天找个10个来试试
    proc mypc.pc ONAME=t1.c 
    gcc -o t1 t1.c -lclntsh -I$ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib
      

  3.   

    昨天用命令行已实现编译,命令和参数和楼上yangqm22一样,谢谢yangqm22,我再进一步完善Makefile,完成后再贴上来。
      

  4.   

    奇怪的是以前环境变量$(ORACLE_HOME)这样使用没问题,现在这个版本的Linux确报错,必须去掉括号。
    例如:cd $(ORACLE_HOME)报command not found,去掉括号就正常了。
      

  5.   

    http://download.csdn.net/source/2308035
    这里有一个gnu make使用文档
      

  6.   

    那个简单的测试程序用proc过了,但是,复杂的程序(程序本身没问题)proc过不了了
    [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
      

  7.   

    proc sdptmain.pc parse=none
    这样写上面的错误就没有了,问题是加上这个参数会有什么影响? 
      

  8.   

    其实,楼主只要熟悉了gmake的使用,这些就都不是什么问题。
      

  9.   

    makefile内容如下:include $(ORACLE_HOME)/precomp/lib/env_precomp.mkINCLUDE = -I. -I$(ORACLE_HOME)/rdbms/publicCC = 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   .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