求助:oracle oci OCIEnvCreate 崩溃

yoyo_alex_lw 2013-06-03 04:28:28
linux 上面安装了install client,根据网上的配置,也做了配置,但是写的例子城西,第一个OCI函数OCIEnvCreate直接运行崩溃。
install client安装了zip版的basic sdk sqlplus
install client 安装目录:
[root@app-node-V-G instantclient_11_2]# pwd
/usr/local/oracle/instantclient_11_2
运行的库(lib sqlplus直接在当前目录,include在sdk目录,tns文件在netwrok/admin目录):
[root@app-node-V-G instantclient_11_2]# ls
adrci glogin.sql libnnz11.so libocijdbc11.so NETWORK sdk xstreams.jar
BASIC_README libclntsh.so libocci.so.11.1 libsqlplusic.so ojdbc5.jar sqlplus
genezi libclntsh.so.11.1 libociei.so libsqlplus.so ojdbc6.jar SQLPLUS_README

库文件已经配置到/etc/ld.so.conf文件中,测试例子编译连接都没有问题

配置的oracle_home等变量,在/etc/profile中,环境变量已经生效
export ORACLE_SID=primdb
export ORACLE_HOME=/usr/local/oracle/instantclient_11_2
export TNS_ADMIN=$ORACLE_HOME/NETWORK/ADMIN
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
export SQLPATH=$ORACLE_HOME
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$PATH:$ORACLE_HOME

调用的例子程序:
OCIEnvCreate(&m_pEnv, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
直接调用这一句报段错误。
66 OCIEnvCreate(&m_pEnv, OCI_THREADED|OCI_EVENTS|OCI_OBJECT|OCI_NCHAR_LITERAL_REPLACE_ON, NULL, NULL, NULL, NULL, 0, NULL);
(gdb)

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff791f0b3 in kpedbgevpec () from /usr/local/oracle/instantclient_11_2/libclntsh.so.11.1

怀疑是install client的配置可能还有问题。从网上找的配置,基本都尝试了,还是报这个错误,不知道怎么解决了。
...全文
326 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyo_alex_lw 2013-06-03
  • 打赏
  • 举报
回复
不需要处理了。自己调用的地方可能有问题。目前能运行调试了。
yoyo_alex_lw 2013-06-03
  • 打赏
  • 举报
回复
补充:刚才写了个单独的oci测试程序,调试没有问题。这样应该说oracle 环境配置没有问题了。 测试程序直接从项目代码里头拷贝出来的。 测试代码: #include <string.h> #include <string> #include <stdlib.h> #include <stdio.h> #include <oci.h> using namespace std; int main(int argc ,char** argv) { string m_strIp = "10.10.71.80"; string m_strUser="test"; string m_strPwd="test"; string m_strDbName="test"; int m_nPort=1521; int m_nConnNum =2 ; int m_nMaxConnNum = 10; string m_strSID; OCIEnv *m_pEnv; OCIError *m_pErr; OCIServer *m_pSrv; OCICPool *m_pCPool; OCIAuthInfo *m_pAuthInfo; unsigned char* m_CPoolName; sb4 m_CPoolNameLen; sword r; //初始化环境 r = OCIEnvCreate(&m_pEnv, OCI_THREADED|OCI_EVENTS|OCI_OBJECT|OCI_NCHAR_LITERAL_REPLACE_ON, NULL, NULL, NULL, NULL, 0, NULL); printf("%d \n",r); // 产生一个指定环境的错误句柄 r = OCIHandleAlloc((dvoid *)m_pEnv, (dvoid **)&m_pErr, OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0); printf("%d \n",r); // 产生一个指定环境的服务句柄 r = OCIHandleAlloc((dvoid *)m_pEnv, (dvoid **)&m_pSrv, OCI_HTYPE_SERVER, (size_t)0, (dvoid **)0); printf("%d \n",r); //产生一个连接池句柄 r = OCIHandleAlloc((dvoid *)m_pEnv, (dvoid **)&m_pCPool, OCI_HTYPE_CPOOL, (size_t)0, (dvoid **)0); printf("%d \n",r); m_CPoolNameLen = 2048; m_CPoolName = (unsigned char*)malloc(m_CPoolNameLen); memset(m_CPoolName,0,m_CPoolNameLen); if(OCI_SUCCESS != OCIConnectionPoolCreate(m_pEnv,m_pErr,m_pCPool,(unsigned char**)&m_CPoolName,&m_CPoolNameLen, (unsigned char *)m_strSID.c_str(),m_strSID.length(),m_nConnNum,m_nMaxConnNum,1 ,(unsigned char*)m_strUser.c_str(),m_strUser.length(),(unsigned char*)m_strPwd.c_str(),m_strPwd.length(), OCI_CPOOL_REINITIALIZE)) { sb4 errCode = 0; OraText errDesp[1024]= {0}; OCIErrorGet((dvoid *)m_pErr, (ub4) 1, (text *) NULL, &errCode, errDesp, (ub4) sizeof(errDesp), OCI_HTYPE_ERROR); //WriteLog("COracleConnPool-InitOracleCPool", errCode<<":"<<errDesp); //ReleaseAllConn(); return -1; } OCIHandleAlloc((dvoid*)m_pEnv,(dvoid**)&m_pAuthInfo,OCI_HTYPE_AUTHINFO,0,NULL); OCIAttrSet((dvoid*)m_pAuthInfo,OCI_HTYPE_AUTHINFO,(char*)m_strUser.c_str(),m_strUser.length(),OCI_ATTR_USERNAME,m_pErr); OCIAttrSet((dvoid*)m_pAuthInfo,OCI_HTYPE_AUTHINFO,(char*)m_strPwd.c_str(),m_strPwd.length(),OCI_ATTR_PASSWORD,m_pErr); return 0; }

17,086

社区成员

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

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