操作系统:Linux jabnih-VirtualBox 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux
编译器:gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Automake :automake (GNU automake) 1.11.1(下载链接(FTP下载): ftp://ftp.gnu.org/gnu/automake/)
OCI版本:ocilib-4.0.1-gnu.tar.gz(下载链接:http://orclib.sourceforge.net/)
另还有一些前提:
automake-1.11.1.tar.gz (这个很恶心,在make oci的时候提示缺少automake-1.11但是装了1.11就会提示版本太老,中间提示说某个东西使用的是1.11.1,装了最新的1.15提示说是1.11创建....芭啦芭啦)。
还需要下载:
oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm
下载链接(根据系统选择合适版本):
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
普及知识:
Linux下源码安装三步走:./configure && make && make install
注:我是安装完后才写的,如有错误请直接喷
备注:
Linux在一台虚拟机上,Oracle安装在另一台虚拟机Xp上,通过远程访问
(这里我使用的都是默认路径安装,如需指定路径,配置时使用--prefix前缀)
1.首先安装:
oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm
这三个的安装参照http://docs.opsview.com/doku.php?id=opsview4.4:opspacks:templates:oracle-rdbms
上述如果可以用sqlplus连接Oracle就基本表示安装成功了
SQL*Plus测试:
这里使用的是远程连接,hr/hr是username 和pwd
2.安装automake-1.11.1
3.配置环境变量(~/.bashrc文件)
这里说明下 ,ORACLE_HOME配置的是上面basic客户端的路径
其中LD_LIBRARY_PATH中/usr/local/lib是最后面安装好oci lib的路径
4.开始安装OCI
这是我开始存放的位置
解压ocilib-4.0.1-gnu.tar.gz
1.进入该目录,./configure配置
2. make
3. make install
途中可能遇到的问题:
1.oci_import.h:48:19: error: oci.h: No such file or directory
这个原因是之前./configure没有指定ocilib所需头文件位置,--with-oracle-headers-path来指定,安装客户端后会有一个头文件目录,默认路径下是/usr/include/oracle/11.2/client
找不到可以使用 find / -name oci.h来找出所在路径(这方法比较挫)
2.make的时候出现automake版本太老,之前提过
3.安装完写demo的时候
LD_LIBRARY_PATH没有配置好,参考前面配置
示例代码:
#include "ocilib.h"
#include
int main()
{
OCI_Connection * cn = NULL;
if ( !OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT) )
{
return -1;
}
cn = OCI_ConnectionCreate("192.168.1.218:1521/orcl","hr", "hr", OCI_SESSION_DEFAULT);
if ( cn != NULL )
{
printf("%s\n", OCI_GetVersionServer(cn));
OCI_ConnectionFree(cn);
}
OCI_Cleanup();
return 0;
}
编译
执行