解决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)
