linux下OCI开发Oracle ,OCIServerAttach卡死问题

wzy9854 2014-04-23 03:54:05
最近在研究linux下OCI接口,写了一个connect函数,结果不能用,每到OCIServerAttach就会卡死,用gdb调试还会报出
siglongjmp 信号错误 不知道是linux环境没配置正确 还是tnsnames.ora有问题
编译也能通过,程序也能跑起来不报错,就是会卡在OCIServerAttach函数,求大神啊!!!!
代码如下,应该不会是代码的问题T.T


void* __stdcall ictora_connect(char *dsn,char *user,char *pass, int flag)
{
ICTORA_ENV *l_env = NULL;
OCIEnv *myenvhp = NULL;
sword errno = 0;
sword retcode = 0;
char outmsg[512+1];

l_env = (ICTORA_ENV*)malloc(sizeof(ICTORA_ENV));
memset(l_env,0,sizeof(ICTORA_ENV));

//1。初始化OCI运行环境
retcode = OCIEnvCreate((OCIEnv **) &(l_env->l_envhp), (ub4) OCI_DEFAULT,(dvoid *) 0, (dvoid * (*)(dvoid *,size_t)) 0, (dvoid * (*)(dvoid *, dvoid *, size_t)) 0, (void (*)(dvoid *, dvoid *)) 0, (size_t) 0, (dvoid **) 0);
if(retcode != OCI_SUCCESS)
{
ictora_free_env(l_env);
return NULL;
}

retcode = OCIHandleAlloc( (dvoid *) l_env->l_envhp, (dvoid **) &(l_env->l_errhp), OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0);
if(retcode != OCI_SUCCESS)
{
ictora_free_env(l_env);
return NULL;
}
//2。初始化连接环境资源
retcode = OCIHandleAlloc( (dvoid *) l_env->l_envhp, (dvoid **) &(l_env->l_srvhp), OCI_HTYPE_SERVER,(size_t) 0, (dvoid **) 0);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}

retcode = OCIHandleAlloc( (dvoid *) l_env->l_envhp, (dvoid **) &(l_env->l_svchp), OCI_HTYPE_SVCCTX,(size_t) 0, (dvoid **) 0);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}

retcode = OCIAttrSet( (dvoid *) l_env->l_svchp, OCI_HTYPE_SVCCTX, (dvoid *)l_env->l_srvhp,(ub4) 0, OCI_ATTR_SERVER, (OCIError *) l_env->l_errhp);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}

//3。设置连接属性
printf("Before OCIServerAttach\n");
retcode = OCIServerAttach( l_env->l_srvhp, l_env->l_errhp, (text *)dsn, strlen(dsn), OCI_DEFAULT);
printf("Pass OCIServerAttach\n");
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}

retcode = OCIHandleAlloc((dvoid *) l_env->l_envhp,
(dvoid **)&(l_env->l_authp),(ub4) OCI_HTYPE_SESSION,
(size_t) 0, (dvoid **) 0);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}
retcode = OCIAttrSet((dvoid*)l_env->l_svchp,(ub4)OCI_HTYPE_SVCCTX,
(dvoid*)l_env->l_authp,(ub4)0,(ub4)OCI_ATTR_SESSION,
(OCIError*)l_env->l_errhp);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}

retcode = OCIAttrSet((dvoid *) l_env->l_authp, (ub4) OCI_HTYPE_SESSION,(dvoid *) user, (ub4) strlen((char *)user),(ub4) OCI_ATTR_USERNAME, l_env->l_errhp);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}
retcode = OCIAttrSet((dvoid *) l_env->l_authp, (ub4) OCI_HTYPE_SESSION,(dvoid *) pass, (ub4) strlen((char *)pass),(ub4) OCI_ATTR_PASSWORD, l_env->l_errhp);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}
//4。连接目标数据库
retcode = OCISessionBegin ( l_env->l_svchp, l_env->l_errhp, l_env->l_authp, OCI_CRED_RDBMS,(ub4) OCI_DEFAULT);
if(checkerr(l_env->l_errhp,retcode,outmsg)!=0)
{
//释放已创建资源,返回错误信息
ictora_free_env(l_env);
return NULL;
}
return l_env;
}
...全文
630 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yihaijun 2014-08-23
  • 打赏
  • 举报
回复
为什么结贴,你用哪种方式解决的?
yihaijun 2014-08-16
  • 打赏
  • 举报
回复
请修改操作系统 ulimit -n参数,我这边把ulimit -n改小很容易重现 我认为虽然这个参数是对一个进程限制,但手动启的程序或用system启的进程都属于同一个父进程
源码直接下载地址: https://pan.quark.cn/s/32a64cc0d812 LKH 算法在中文中的表述为 LKH 算法,它是一种用于处理 TSP(旅行商问题)与 VRP(车辆配送问题)等组合优化挑战的启发式算法,并且该算法是 Lin-Kernighan 启发式方法的进一步发展。该算法的开发与执行过程具有相当的挑战性,然而,它被认为是获取对称旅行商问题最优或接近最优答案的最有效途径之一。LKH 算法的升级版本通过运用灵敏度分析来引导并约束搜索过程,从而使得该算法能够在可接受的时间内为大规模问题找出最优解。通过计算实验的验证,证明该方法具备高效性,能够在不足一秒的时间范围内寻得典型100座城市问题的最优方案,而对于典型的1000座城市问题,也能在不到一分钟的时间框内找到最优解。旅行商问题(TSP)是组合优化领域中研究最为深入的课题之一,该问题可以通过成本矩阵 C 的特性来进行分类。此问题可划分为对称性情形与非对称性情形,同时依据三角不等式的成立与否,可进一步区分为度量性情形与非度量性情形。TSP 的显著地位源于其广泛的实际应用,其中许多应用看似与旅行路径无直接关联。众多现实场景能够以 TSP 的形式来模拟,例如计算机内部布线、车辆路径规划、晶体结构分析、机器人导航控制、印刷电路板打孔定位以及时间表的制定等。TSP 作为一种典型的组合优化课题,其研究对于解决该学科范畴内的其他课题往往具有指导意义。事实上,组合优化领域的诸多突破均可追溯至对 TSP 问题的深入探索。计算方法中广为人知的 branch and bound 技术最初便是在 TSP 的研究背景下被引入的。攻克 TSP 所面临的智力难题亦起到了推动作用,该问题的表述看似简单,却极难求解。当考虑到可能...
内容概要:本文研究了基于深度Q网络(DQN)与非正交多址接入(NOMA)技术相结合的无人机上行链路干扰管理方法,并提供了完整的Python代码实现。通过构建DQN强化学习模型,动态优化无人机在复杂无线环境中的资源分配策略,有效缓解多用户接入带来的同频干扰问题,提升上行链路的通信效率与系统容量。研究充分融合了DQN在决策优化方面的自主学习能力与NOMA在频谱效率提升上的技术优势,重点探讨了在高动态、强干扰的无人机通信场景下,如何实现高效的干扰协调与功率控制。仿真实验验证了该方法在不同用户密度和信道条件下的鲁棒性与优越性,显著降低了误码率并提高了系统吞吐量。; 适合人群:具备一定Python编程能力和机器学习基础,熟悉强化学习或无线通信领域的研究生、科研人员及相关领域工程师。; 使用场景及目标:①研究无人机通信系统中的动态干扰管理和资源调度问题;②学习DQN在通信网络优化中的建模、训练与部署流程;③复现并改进基于NOMA的多用户接入干扰抑制方案,推动智能通信算法的实际应用; 阅读建议:此资源结合理论分析与代码实践,建议读者在掌握强化学习基本原理和无线通信基础知识的前提下,结合所提供的Python代码进行仿真实验,深入理解DQN与NOMA融合机制,并尝试调整网络结构、奖励函数及通信参数以进一步优化系统性能。

23,224

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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