+ -
当前位置:首页 → 问答吧 → 救命啊!occi编译连接问题。。。

救命啊!occi编译连接问题。。。

时间:2010-07-27

来源:互联网

由于开发oracle连接中间件的需要,要使用到occi。连接时却总是报错。。。
环境:aix53、gcc4.2、oralce10g
编译一个简单的demo时报错
ld: 0711-317 ERROR: Undefined symbol: .oracle:cci::Environment::createEnvironment(oracle:cci::Environment::Mode, void*, void* (*)(void*, unsigned long), void* (*)(void*, void*, unsigned long), void (*)(void*, void*))
ld: 0711-317 ERROR: Undefined symbol: .oracle:cci::Environment::terminateEnvironment(oracle:cci::Environment*)
ld: 0711-317 ERROR: Undefined symbol: typeinfo for oracle:cci::SQLException
collect2: ld returned 8 exit status

考虑可能是occi库装的不全,从oracle官方网站下载了一个instantclient_11_2,解压安装后,引入编译还是同样的问题。。。

#include <iostream>
#include <occi.h>

using namespace std;
using namespace oracle:cci;

int main()
{
        Environment *env=Environment::createEnvironment();//初始化occi环境
       
        //用户输入密码,名字,数据库
        string name;
        string pwd;
        string dbname;
        cout<<"请输入用户名,密码及数据库连接串";
        cin>>name>>pwd>>dbname;

        try
        {
                Connection *conn=env->createConnection(name,pwd,dbname);//创建到oracle的连接
                cout<<"您已成功连接数据库!"<<endl;
                env->terminateConnection(conn);//关闭连接
        }
        catch(SQLException e)
        {
                cout<<e.what()<<endl;//捕获错误
        }
       
        Environment::terminateEnvironment(env);//关闭环境
       
        return 0;
}

作者: caicai15   发布时间: 2010-07-27

将libocci*.so, libclntsh*.so 拷贝到/usr/lib下, 然后gcc加上 -locci -lclntsh  试试

作者: rain_fish   发布时间: 2010-07-27

看手册吧,我之前下载的不是这个,是那个OCCI for Linux/Windows
http://www.oracle.com/technology/tech/oci/occi/index.html

作者: ecjtubaowp   发布时间: 2010-07-27

谢谢,我试试

作者: caicai15   发布时间: 2010-07-27

回复 caicai15


    occi?   莫非是oci上面又封装了一层的东东???
instant client 的配置过程如下:   
http://hi.baidu.com/mgqw/blog/item/9b36c1167592304d21a4e9e1.html

这个是OCI的入门
http://hi.baidu.com/mgqw/blog/item/9b36c1166407c14d20a4e99e.html

作者: mgqw   发布时间: 2010-07-27



QUOTE:
回复  caicai15


    occi?   莫非是oci上面又封装了一层的东东???
instant client 的配置过程如 ...
mgqw 发表于 2010-07-27 11:52




    哥们儿,you奥特曼了。。。

作者: rain_fish   发布时间: 2010-07-27

回复 rain_fish


    我那会连oracle都是直接查询oci的底层函数,  然后自己根据应用封装的……

作者: mgqw   发布时间: 2010-07-27



QUOTE:
将libocci*.so, libclntsh*.so 拷贝到/usr/lib下, 然后gcc加上 -locci -lclntsh  试试
rain_fish 发表于 2010-07-27 11:21




    不行,我试过了。。
[email protected] : /asiainfo/wps/instantclient_10_2> ls
classes12.jar    libnnz10.so      libociei.so      ojdbc14.jar      ttt
libclntsh.a      libocci.a        libocijdbc10.so  sdk
[email protected] : /asiainfo/wps/instantclient_10_2> nm -gA libocci.a > ttt
[email protected] : /asiainfo/wps/instantclient_10_2> grep createEnvironment ttt
[email protected] : /asiainfo/wps/instantclient_10_2> nm -gA libclntsh.a  > ttt
[email protected] : /asiainfo/wps/instantclient_10_2> grep createEnvironment ttt
查看了引用的instantclient的库文件,确实找不到createEnvironment 。。。
不管是instantclienth还是企业版,都是这个问题。。。

作者: caicai15   发布时间: 2010-07-27



QUOTE:
不行,我试过了。。
: /asiainfo/wps/instantclient_10_2> ls
classes12.jar    libnnz10.so  ...
caicai15 发表于 2010-07-27 11:57




    仔细查查是什么原因,我就是这么做的,也没出现这样的错误。。。
另外,哥们儿是在亚信工作吧?

作者: rain_fish   发布时间: 2010-07-27



QUOTE:
仔细查查是什么原因,我就是这么做的,也没出现这样的错误。。。
另外,哥们儿是在亚信工作吧?
rain_fish 发表于 2010-07-27 13:39




    原来是同事哈,^_^。我感觉是g++编译器和occi库不兼容导致的,请问你那边用的是什么编译器?。。。

作者: caicai15   发布时间: 2010-07-27

装测试主机的真是太罗嗦了,叫装一个xlC编译器,几天装不上,早就想换编译器试试了。。。

作者: caicai15   发布时间: 2010-07-27



QUOTE:
原来是同事哈,^_^。我感觉是g++编译器和occi库不兼容导致的,请问你那边用的是什么编译器?。。 ...
caicai15 发表于 2010-07-27 14:07




    呵呵,不是同事,你的信息:[email protected] : /asiainfo/wps/instantclient_10_2> ls透漏的,呵呵应该不是g++编译器的问题,你仔细查查吧,
我的gcc 版本 4.1.2

作者: rain_fish   发布时间: 2010-07-27

作者: SpringfieldKing   发布时间: 2010-07-27



QUOTE:
呵呵,不是同事,你的信息: : /asiainfo/wps/instantclient_10_2> ls透漏的,呵呵应该不是g++编 ...
rain_fish 发表于 2010-07-27 14:41




    呵呵,谢谢。我下载gcc4.1.2试试,环境变量设置有什么需要注意的吗?我只设置了ORACLE_HOME、PATH、LD_LIBRARY_PATH,库文件-locci -lclntsh  这两个应该是够了

作者: caicai15   发布时间: 2010-07-27

你先确定你的instant client设置好了没有, 如果设置好了先用sqlplus测试下能否成功链接数据库
能成功链接数据库了再做下一步

作者: mgqw   发布时间: 2010-07-27

回复 caicai15


    要是sqlplus链不上oracle的话, 其他程序就别想能链上去了。

作者: mgqw   发布时间: 2010-07-27