日期:2014-05-16  浏览次数:20839 次

求助使用gcc代替oraxlc命令的方法
现在我碰到个环境问题,就是我拿到的是在aix系统里用oraxlc命令能够顺利通过编译的源代码。由于该系统和oracle都是收费的,所以我没有办法配置这个环境。我这里只有windows版的oracle可以使用。

我现在想通过使用 gcc编译器 或者 其他的能够将c文件编译成o文件的编译器 来代替oraxlc编译器进行编译这些文件,不知道能不能实现?

源代码makefile的语句为:

############# SET directory environment #############
ORAUSER=$(USERID)/$(PASSWD)
INCDIR=../inc
BINDIR=../../bin
OBJDIR=../STRUtil
################# compile environment ###############
PROC=$(ORACLE_HOME)/bin/proc
CC=$(ORACLE_HOME)/bin/oraxlc
CFLAGS=
LIBHOME=$(ORACLE_HOME)/lib
ORAINC=-I$(ORACLE_HOME)/precomp/public -I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/plsql/public -I$(ORACLE_HOME)/network/public

OBJS = 0101RyokinKesanMain.o \
0102MaxUkeireGasRyoSantei.o \
0103KihonKoumokuSantei.o \
0104TakusouKyokyuSantei.o \
0105FutaiServiceRyoSantei.o \
0106MaxHaraidashiGasRyoSantei.o \
0107KeiyakuHenkouSeisanSantei.o \
0108MaxHaraiGasRyoSeisankin.o \
0109IhankinSantei.o \
0110KafusokuGasRyoSantei.o \
0111UkeireGasRyoAnbunSantei.o \
0112JyuyouBasyoSoukatsuMeisai.o \
0113KeiyakusyaSoukatsuMeisai.o \
$(OBJDIR)/STRUtil.o

TARGET = $(BINDIR)/RKNBAT01

all : $(OBJS)
$(CC) -O3 -q64 $(OBJS) -o $(TARGET) -L$(LIBHOME) -lclntsh -lld -lm `cat $(ORACLE_HOME)/lib/sysliblist` -lm -lc_r -lpthreads

.SUFFIXES: .pc .c .o

.pc.c:
$(PROC) INAME=$< ONAME=$*.c CODE=ANSI_C \
INCLUDE=$(INCDIR) SELECT_ERROR=NO SQLCHECK=SEMANTICS USERID=$(ORAUSER)

.c.o :
$(CC) -O3 -q64 $(CFLAGS) -I$(INCDIR) $(ORAINC) -c $<

clean:
/bin/rm -f *.c *.o *.lis $(TARGET)

我把CC= 后面内容改成了gcc的路径,但是在
$(CC) -O3 -q64 $(OBJS) -o $(TARGET) -L$(LIBHOME) -lclntsh -lld -lm `cat $(ORACLE_HOME)/lib/sysliblist` -lm -lc_r -lpthreads

$(CC) -O3 -q64 $(CFLAGS) -I$(INCDIR) $(ORAINC) -c $<

会由于命令参数错误导致编译失败。

要怎样修改才能通过编译并且得到和原来的系统环境下一样的所有文件呢?

------解决方案--------------------
探讨

oraxlc 没用过
你直接换成gcc 编译有什么问题?

------解决方案--------------------

$(CC) -O3 $(OBJS) -o $(TARGET) -L$(LIBHOME) -lclntsh -lm `cat $(ORACLE_HOME)/lib/sysliblist` -lm -lc_r -pthread

$(CC) -O3 $(CFLAGS) -I$(INCDIR) $(ORAINC) -c $<

要么你这样试试?主要改动是:
-lld 这个我估计是不需要的。我估计这个是指动态链接器 /lib/ld-linux.so.2 。gcc默认会使用的。
使用了-pthread 来支持线程库。
LZ的 -q64 是个什么选项,我是完全不理解的,最好能说一下它的含义。我这里先删了。。。
------解决方案--------------------
-q64表示编译64位的应用程序
-q32表示32位