免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6696 | 回复: 6
打印 上一主题 下一主题

[C++] 验证C++连接ORACLE数据库的时候报错(已经解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-29 10:46 |只看该作者 |倒序浏览
本帖最后由 zhanhorse 于 2013-07-29 16:52 编辑

验证C++连接ORACLE数据库的时候报错,不知道什么原因!
服务器:
HP-UX B.11.31 U ia64 (ta)

$ cat Makefile
includepath=${ORACLE_HOME}/rdbms/public
libpath=${ORACLE_HOME} b
libfile=-L ${libpath} -L libocci -L libclntsh
incfile=-I ${includepath}

occiselect:select.cpp
        aCC -g -o occiselect select.cpp  ${libfile} ${incfile}
clean:
        rm occiselect


$ cat select.cpp
#include <iostream>   
#include <occi.h>   
using namespace std;   
using namespace oracle:cci;   
main()   
{   
        Environment *env=Environment::createEnvironment();//create succ   
   
        string name = "name";   
        string pwd = "pwd";   
        string dbname = "DBDEMO";   
   
        try   
        {   
                Connection *conn=env->createConnection(name,pwd,dbname);//   
                cout<<"conn succ!"<<endl;   
                env->terminateConnection(conn);//   
        }   
        catch(SQLException e)   
        {   
                cout<<e.what()<<endl;//   
        }   
            
        Environment::terminateEnvironment(env);//   
        cout<<"end!"<<endl;   
}  

$
$ make occiselect
aCC -g -o occiselect select.cpp  -L /home/oracle/product/10.2.0 b -L libocci -L libclntsh -I /home/oracle/product/10.2.0/rdbms/public
"/home/oracle/product/10.2.0/rdbms/public/occiData.h", line 503: warning #2815-D:
          type qualifier on return type is meaningless
    const int sign() const ;
    ^

ld: Unsatisfied symbol "oracle:cci::Environment::createEnvironment(oracle:cci::Environment::Mode,void*,void* (*)(void*,unsigned long),void* (*)(void*,void*,unsigned long),void (*)(void*,void*))" in file select.o
ld: Unsatisfied symbol "oracle:cci::SQLException::SQLException(oracle:cci::SQLException const&(complete)" in file select.o
ld: Unsatisfied symbol "oracle:cci::SQLException::what() const" in file select.o
ld: Unsatisfied symbol "oracle:cci::SQLException::~SQLException()(complete)" in file select.o
ld: Unsatisfied symbol "oracle:cci::Environment::terminateEnvironment(oracle:cci::Environment*)" in file select.o
ld: Unsatisfied symbol "type info of oracle:cci::SQLException" in file select.o
6 errors.

正确的Makefile:
$ cat Makefile
includepath=${ORACLE_HOME}/rdbms/public
libpath=${ORACLE_HOME}/lib
libfile=-L ${libpath} -locci -lclntsh
incfile=-I ${includepath}

occiselect:select.cpp
        aCC +DD64 -g -o occiselect select.cpp  ${libfile} ${incfile}
clean:
        rm occiselect

$

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2013-07-29 10:57 |只看该作者
-l libocci -l libclntsh

论坛徽章:
0
3 [报告]
发表于 2013-07-29 11:31 |只看该作者
回复 2# hellioncu

还是报错了,下面是日志
$ make occiselect
aCC -g -o occiselect select.cpp  -L /home/oracle/product/10.2.0/lib -l libocci -l libclntsh -I /home/oracle/product/10.2.0/rdbms/public
"/home/oracle/product/10.2.0/rdbms/public/occiData.h", line 503: warning #2815-D:
          type qualifier on return type is meaningless
    const int sign() const ;
    ^

ld: Can't find library for -llibocci
Fatal error.
make: *** [occiselect] Error 1
$
$ cat Makefile
includepath=${ORACLE_HOME}/rdbms/public
libpath=${ORACLE_HOME}/lib
libfile=-L ${libpath} -l libocci -l libclntsh
incfile=-I ${includepath}

occiselect:select.cpp
        aCC -g -o occiselect select.cpp  ${libfile} ${incfile}
clean:
        rm occiselect

$
$ ls -lrt ${ORACLE_HOME}bbocci*
-rw-r--r--   1 oracle10   dba              0 Dec 22  2005 /home/oracle/product/10.2.0bbocci10_296.so.10.1
-rw-r--r--   1 oracle10   dba              0 Dec 22  2005 /home/oracle/product/10.2.0bbocci10_296.a
-rw-r--r--   1 oracle10   dba        10200886 Apr 23  2008 /home/oracle/product/10.2.0bbocci10.a
-r-xr-xr-x   1 oracle10   dba        3254168 Apr 23  2008 /home/oracle/product/10.2.0bbocci.so.10.1
lrwxrwx---   1 oracle10   dba             15 Jun 24  2010 /home/oracle/product/10.2.0bbocci.so -> libocci.so.10.1
$ ls -lrt ${ORACLE_HOME}bbclntsh*  
-rw-r--r--   1 oracle10   dba              0 Jun 11  2010 /home/oracle/product/10.2.0bbclntsh.sl
-rwxr-xr-x   1 oracle10   dba        36877088 Jun 11  2010 /home/oracle/product/10.2.0bbclntsh.so.10.1
lrwxrwx---   1 oracle10   dba             17 Jun 24  2010 /home/oracle/product/10.2.0bbclntsh.so -> libclntsh.so.10.1



   

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2013-07-29 12:07 |只看该作者
zhanhorse 发表于 2013-07-29 11:31
回复 2# hellioncu

还是报错了,下面是日志



-l occi -l clntsh

论坛徽章:
0
5 [报告]
发表于 2013-07-29 15:13 |只看该作者
回复 4# hellioncu


    不好意思了,还是报错!很郁闷。

$ make occiselect
aCC -g -o occiselect select.cpp  -L /home/oracle/product/10.2.0/lib -l occi -l clntsh -I /home/oracle/product/10.2.0/rdbms/public
"/home/oracle/product/10.2.0/rdbms/public/occiData.h", line 503: warning #2815-D:
          type qualifier on return type is meaningless
    const int sign() const ;
    ^

ld: Mismatched ABI for -locci, found /home/oracle/product/10.2.0/lib/libocci.so
Fatal error.
make: *** [occiselect] Error 1
$
$
$ cat Makefile   
includepath=${ORACLE_HOME}/rdbms/public
libpath=${ORACLE_HOME}/lib
libfile=-L ${libpath} -l occi -l clntsh
incfile=-I ${includepath}

occiselect:select.cpp
        aCC -g -o occiselect select.cpp  ${libfile} ${incfile}
clean:
        rm occiselect

$

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2013-07-29 16:20 |只看该作者
zhanhorse 发表于 2013-07-29 15:13
回复 4# hellioncu


可能是程序和库 32/64位不匹配,aCC后面指定   +DD32 或者   +DD64 试试

论坛徽章:
0
7 [报告]
发表于 2013-07-29 16:49 |只看该作者
回复 6# hellioncu


    终于正确了,超级感谢!这下我就可以好好研究数据转换代码模块的开发。)
$ cat Makefile
includepath=${ORACLE_HOME}/rdbms/public
libpath=${ORACLE_HOME}/lib
libfile=-L ${libpath} -locci -lclntsh
incfile=-I ${includepath}

occiselect:select.cpp
        aCC +DD64 -g -o occiselect select.cpp  ${libfile} ${incfile}
clean:
        rm occiselect

$
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP