日期:2014-05-16  浏览次数:20759 次

[紧急求助]关于在64位Linux(Redhat)上使用OCCI的问题
各位大神,你们好!
  小弟遇到了如题所示的问题,之前自己使用的Redhat是5.5 32位版本的,装的ORACLE自然也是32位,因此从未考虑32位和64位的问题。
项目中需要使用OCCI远程访问数据库,编写的程序以及接口在自己的电脑上运行均没有问题,放到测试服务器(64位Linux,64位ORACLE)上无法使用。
小弟也做过以下的测试,直接在测试服务器上编写一个小程序,就一个main函数,直接调用occi接口,以下是occi访问数据库的流程以及我的一段代码:
OCCI流程:
createEnvironment;    //创建环境变量
createConnection;    //通过传入用户名,密码,连接字符串来建立连接
createStatement;    //建立statement对象
executeSQL;    //执行相应的SQL语句
terminateStatement;    
terminateConnection;
terminateEnvironment;

我在main函数中,一部分的代码:
Environment* pEnv = NULL;
bool bHasException = false;
try
{
    pEnv = Environment::createEnvironment();
}
catch(...)
{
    bHasException = true;
    pEnv = NULL;
}
if(NULL == pEnv)
{
    if (bHasException)
        printf("Create Environment Exception!\n");
    else 
        printf("Ceate Environment Failed!\n");

    return -1;
}
printf("Create Environment Successed!\n");
....

由于测试机上是64位Linux, 安装的ORACLE也是64位的,因此在编译的时候我已经指定调用的OCCI库为ORACLE路径下的libocci.so,该库自然也是64位版本的,并且编译时还提示libstdc++.so.5的一个问题,也在编译时指定使用/usr/lib64/libstdc++.so.5,因此编译正常通过了,但是!!!问题在于执行以上的测试程序时,输出直接是“段错误”,无法catch到异常。

接着,小弟将自己32位机器上的libocci.so以及其他的一些依赖库拷贝到测试机上,并且在编译的时候指定使用拷贝过来的这32位occi库,指定/usr/lib/libstdc++.so.5,指定-m32参数,编译正常,执行的时候反而可以得到提示"Create Environment Exceptopn!",这里不明白为何同样的代码,一个可以catch到异常,一个不可以。但是更为关键的是不明白为何无法创建环境变量?

我在网上搜索一些OCCI的安装以及使用,也有网友是在64位Linux系统上安装OCCI并且编写程序访问数据库,但是他们似乎都没有遇到我这样的问题。因此来这里请教各位大神,该项目时间较紧,没想到都到现在了还在纠结环境的问题,如果有哪路好汉遇到过这样的问题或者能帮忙的,感激不尽!!!!

拜谢!!!

------解决方案--------------------
按道理现在oracle的occi库已经相当稳定了.不知道你用的版本是多少?11g ? 10g? 描述的越详细越清楚越好.
你在64位环境下边编译没问题,在运行时,LD_LIBRARY_PATH以及PATH设置,首先确保没有问题.确保libstdc++.so.5 搜索路径在前头.

如果真的还解决不了问题,你可以用你说的32位的occi去运行.