RedHat6.6+Oracle11g下Pro*C程序编译

本文记录了将一套Pro*C程序从RedHat5.5+Oracle10g环境移植到RedHat6.6+Oracle11g环境的过程。主要解决的问题包括环境变量配置、缺少库文件libclntsh.so.11.1及curses.h文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iamlaosong文

原有一套Pro*C程序运行在RedHat5.5+Oracle10g环境下,随着数据的增加,原服务器不堪重负,新买了一台服务器。厂家说新服务器不能安装原来的环境,只能安装RedHat6.6+Oracle11g,所以原来的那套程序要移植到新服务器上,移植过程中碰到很多问题,很多是自己没有经验造成的。

1、直接拷贝原来的执行程序

程序在新环境运行后提示需要运行库libclntsh.so.10.1,这个是Oracle10的库,心想肯定要重新编译了,于是将源程序拷贝过来,重新编译。

2、重新编译源程序

编译后提示找不到库文件libclntsh.so.11.1,但这个文件是有的,所以怀疑makefile在新环境下是不是不行,在网上找了几个,都不行,折腾半天,发现是环境变量问题,需要设置LD_LIBRARY_PATH,当然这中间还有一些曲折,就不多说了,用命令 vi ./.bash_profile可以编辑的环境变量设置批处理文件,内容如下:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export ORACLE_BASE=/opt/11g/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export ORACLE_SID=orcl

export PATH=$PATH:HOME/bin:$ORACLE_HOME/bin

LD_LIBRARY_PATH=/usr/lib:/usr/lib64

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
LD_LIBRARY_PATH=$ORACLE_HOME/rdbms/lib:$ORACLE_HOME/lib:$LD_LIBRARY_PATH

export PATH LD_LIBRARY_PATH NLS_LANG


环境设置好了,编译又提示缺少curses.h文件,即:

 error: curses.h: No such file or directory

查原服务器确实有curses.h这个文件,在/usr/include目录下,新服务器却没有,以为这个文件被删了,复制了一个,结果编译的时候被错误刷屏了,可见不是拷贝一个能解决问题的。查询相关资料,得知需要安装ncurses。

3、安装ncurses

从安装光盘或ISO文件的Packages目录中找到安装包ncurses-devel-5.7-3.20090208.el6.x86_64.rpm,传到服务器任意目录,root用户下进入该目录执行下面的安装命令即可:

rpm -ivh ncurses-devel-5.7-3.20090208.el6.x86_64.rpm

这儿有个小插曲,网上看到的安装命令是:yum install ncurses-devel ncurses

结果安装不上,只好用rpm命令直接安装,后来才知道,yum命令不是在当前目录下找安装包,而是需要将安装包放在/var/cache/yum目录下。

安装完成后,重新编译程序,一切正常!本程序的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 clean

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

clean:
	rm -f *.c *.o *.lis tp*

最后,令人啼笑皆非的是直接拷贝过来的程序也可以执行了,不再提示缺少库libclnts h.so.10.1了,可见当时这个提示是环境变量不对,环境变量对了,就可以找到libclntsh.so.10.1,后来查了一下,果然$ORACLE_HOME/lib目录下libclntsh.so.10.1和libclntsh.so.11.1都有




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值