OCCI出错,请问该如何解决。

WaterWalker 2007-07-27 06:31:49
代码如下: occi.cpp

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

using namespace oracle::occi;
using namespace std;

int occi_dbop()
{
Environment *env = Environment::createEnvironment();
Connection *conn = env->createConnection( "u", "u", "test" );//all strings
Statement *stmt = conn->createStatement( "select acct from company");
ResultSet *rs = stmt->executeQuery();

while( rs->next() )
{
string acct = rs->getString( 1 );
cout<<acct<<endl;
}

conn->terminateStatement (stmt);
env->terminateConnection (conn);
Environment::terminateEnvironment (env);

return 0;
}

int main( int argc, char ** argv )
{
occi_dbop();
return 0;
}

Makefile
原来的编译的时候有waring: /usr/bin/ld: warning: libstdc++.so.5, needed by /home/db/oracle/product/10.2.0/db_1/lib/libocci.so, may conflict with libstdc++.so.6;google后解决了,参考
http://forums.oracle.com/forums/thread.jspa?messageID=1394811
http://www.oracle.com/technology/tech/oci/occi/occidownloads.html

INCS = -I$(ORACLE_HOME)/rdbms/public/
#LIBDIRS = -L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib
LIBDIRS = -L$(HOME)/my_ora_lib/occi_gcc343_x86_64_102030 -L$(ORACLE_HOME)/rdbms/lib
LIB = -lclntsh -locci

occi : occi.cpp
g++ -g $(INCS) $(LIBDIRS) $(LIB) occi.cpp -o occi

机器环境:
>uname -a
Linux test111 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:56:28 EST 2006 x86_64 x86_64 x86_64 GNU/Linux

出错信息:只取出第一条帐号
>./occi
1108071001512505010000000032
*** glibc detected *** free(): invalid pointer: 0x0000000000537528 ***
Aborted

gdb信息
(gdb) r
Starting program: ./occi
[Thread debugging using libthread_db enabled]
[New Thread 182923541376 (LWP 20531)]
1108071001512505010000000032
*** glibc detected *** free(): invalid pointer: 0x0000000000537528 ***

Program received signal SIGABRT, Aborted.
[Switching to Thread 182923541376 (LWP 20531)]
0x00000036dbf2e2ed in raise () from /lib64/tls/libc.so.6
(gdb) bt
#0 0x00000036dbf2e2ed in raise () from /lib64/tls/libc.so.6
#1 0x00000036dbf2fa3e in abort () from /lib64/tls/libc.so.6
#2 0x00000036dbf62db1 in __libc_message () from /lib64/tls/libc.so.6
#3 0x00000036dbf6888e in _int_free () from /lib64/tls/libc.so.6
#4 0x00000036dbf68bd6 in free () from /lib64/tls/libc.so.6
#5 0x00000036decae19e in operator delete () from /usr/lib64/libstdc++.so.6
#6 0x00000036dec90562 in std::string::_Rep::_M_destroy () from /usr/lib64/libstdc++.so.6
#7 0x00000036dec907fa in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string ()
from /usr/lib64/libstdc++.so.6
#8 0x0000000000401188 in occi_dbop () at occi.cpp:18
#9 0x00000000004011ec in main (argc=1, argv=0x7fbffff4c8) at occi.cpp:30
...全文
501 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaterWalker 2007-07-28
  • 打赏
  • 举报
回复
编译成32位也是同样的错误。
iihero 2007-07-28
  • 打赏
  • 举报
回复
你确认你要开发成64位的exe?如果弄成32位的,可能需要-m32编译选项。
好像有个ORACLE_HOME/lib32的路径。

最后,要确保你的glibc库不缺任何东西啊。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧