linux离线安装oci,解决Linux/Unix下OCI程序动态库版本的问题

这段时间做了好几个基础OCI的程序,在Windows上编译后,不需要重新编译, 就可以适应8i/9i/10g的客户端,但在Linux/Unix上,编译好后到不同的版本的客户端去运行时, 总会提示找不到动态库libclntsh.., 这时可以用以下办法去解决:

第一步,修改genclntsh文件,这个文件在Oracle的bin目录下

#

# Library names and locations

CLNT_NAM=clntsh                      # (short) library name

CLNT_VER=9.0                        # library version number

CLNT_LNK=lib${CLNT_NAM}.so          # name of symlink to library

CLNT_LIB=${CLNT_LNK}.${CLNT_VER}    # actual library file name

LIB_DIR=${ORACLE_HOME}/${LIB}        # lib. destination directory

改为:

#

# Library names and locations

CLNT_NAM=clntsh                      # (short) library name

CLNT_VER=9.0                        # library version number

CLNT_LIB=lib${CLNT_NAM}.so          # name of symlink to library

CLNT_LNK=${CLNT_LNK}.${CLNT_VER}    # actual library file name

LIB_DIR=${ORACLE_HOME}/${LIB}        # lib. destination directory

第二步,运行genclntsh重新生成客户端的动态库,这一步不要在正在运行的机器上做.

第三步,用gcc去编译程序时加上以下选项.

gcc -o ocidemo.bin ocidemo.c -I${ORACLE_HOME}/rdbms/demo -L${ORACLE_HOME}/lib -lclntsh -Wl,-Bdynamic

第四步,编写一个Shell去执行OCI程序(ocidemo.bin)

#!/bin/sh

if [ "A${ORACLE_HOME}A" = "AA" ]; then

echo "ORACLE_HOME environment variable not setted."

exit

fi

if [ "A${LD_LIBRARY_PATH}A" = "AA" ];then

LD_LIBRARY_PATH=/lib:/usr/lib

fi

if [ -d ${ORACLE_HOME}/lib32 ]; then

LD_LIBRARY_PATH=${ORACLE_HOME}/lib32:${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}

else

LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${ORACLE_HOME}/lib64:${LD_LIBRARY_PATH}

fi

export LD_LIBRARY_PATH

ocidemo.bin $*

我在RedHat Linux和Solaris上通过以上步骤解决OCI程序的运行库文件问题.

posted on 2008-04-17 01:04 RedLight 阅读(565) 评论(0)  编辑 收藏 引用 所属分类: ORM关系对象数据库架构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值