步骤如下:
//
// 1. 从安装好的
Oracle 11g R2 for X64 Linux 上复制OCCI头文件和库文件:
// (1). 复制头文件
// mkdir -p ~/OCCI-11gR2-X64/include
// cp $ORACLE_HOME/rdbms/public/* ~/OCCI/include/
//
// (2). 复制库文件并建立软链接
// mkdir -p ~/OCCI-11gR2-X64/lib;
// cp $ORACLE_HOME/lib/libocci.so.11.1 ~/OCCI-11gR2-X64/lib/
// cp $ORACLE_HOME/lib/libclntsh.so.11.1 ~/OCCI-11gR2-X64/lib/
// cp $ORACLE_HOME/lib/libocci11.a ~/OCCI-11gR2-X64/lib/
// cp $ORACLE_HOME/lib/libclntst11.a ~/OCCI-11gR2-X64/lib/
//
cp $ORACLE_HOME/lib/libnnz11.so ~/OCCI-11gR2-X64/lib/ <这个库也必须拷贝, 它是libclntsh.so.11.1所依赖的>
// cd ~/OCCI/lib;
// ln -s libclntsh.so.11.1 libclntsh.so;
// ln -s libclntsh.so libclntsh.so.10.1
// ln -s libocci.so.11.1 libocci.so
//
// (3). OCCI-11gR2-X64/lib 目录结构如下
/*
[oracle@gd47 lib]$ ls -l
总计 58424
lrwxrwxrwx 1 oracle oinstall 17 12-07 20:50 libclntsh.so -> libclntsh.so.11.1
lrwxrwxrwx 1 oracle oinstall 12 12-07 20:51 libclntsh.so.10.1 -> libclntsh.so
-rwxr-xr-x 1 oracle oinstall 48725793 12-07 20:46 libclntsh.so.11.1
-rw-r--r-- 1 oracle oinstall 0 12-07 20:46 libclntst11.a
-rw-r--r-- 1 oracle oinstall 7899997 12-07 21:12 libnnz11.so
-rw-r--r-- 1 oracle oinstall 1863334 12-07 20:45 libocci11.a
lrwxrwxrwx 1 oracle oinstall 15 12-07 20:49 libocci.so -> libocci.so.11.1
-rwxr-xr-x 1 oracle oinstall 1260923 12-07 20:45 libocci.so.11.1
*/
//
// 2. 将 OCCI-11gR2-X64 目录打包成 OCCI-11gR2-X64.tar.gz (下载),拷贝到客户机器上.
//
// 3. 客户机器上解压 OCCI-11gR2-X64.tar.gz,例如目录结构为:/home/zhankunlin/oracle/OCCI-11gR2-X64
//
// 4. 客户机器上编译OCCI程序,Makefile 可以按如下方式写
//
/*
OCCI_HOME=/home/zhankunlin/oracle/OCCI-11gR2-X64
OCCI_INCLUDE_DIR=$(OCCI_HOME)/include
OCCI_LIBRARY_PATH=$(OCCI_HOME)/lib
# Attention: You must add "-lnnz11".
cppOracle:
g++ cppOrcl.cpp -o test -I$(OCCI_INCLUDE_DIR) -L$(OCCI_LIBRARY_PATH) -locci -lclntsh
-lnnz11 <注意,必须加上 lnnz11链接libnnz11.so>
*/
//
// 5. 运行,首先设置 LD_LIBRARY_PATH 环境变量,然后执行程序
//
export LD_LIBRARY_PATH=/home/zhankunlin/oracle/OCCI-11gR2-X64/lib
./test
注意:
尽管编译没有问题,但是发现运行时有问题,报出异常错误,
“Error while trying to retrieve text for error ORA-01804”
可能与 Linux下非Oracle数据库安装用户执行OCCI程序 提到的问题有关。