当前位置: 代码迷 >> Oracle开发 >> 多线程中使用occi导致string析构异常
  详细解决方案

多线程中使用occi导致string析构异常

热度:54   发布时间:2016-04-24 06:38:40.0
多线程中使用occi导致string析构错误
平台:HP-UX server1 b.11.23 u ia64 3966008937
            oracle 9i
代码:

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

int main ()
{
oracle::occi::Environment * m_env ;
oracle::occi::Connection * m_conn ;
m_env = oracle::occi::Environment::createEnvironment(oracle::occi::Environment::THREADED_MUTEXED); //THREADED_MUTEXED THREADED_UNMUTEXED DEFAULT都不管用
m_conn = m_env->createConnection("zhkz", "zhkz", "gk0");
m_env->terminateConnection(m_conn);
oracle::occi::Environment::terminateEnvironment(m_env);

std::string sTable = "test";
std::string sSQL = "testtesttesttesttesttesttest" + sTable + "testtest";
}

Makefile:

ORACLE_INCLUDES=-I$(ORACLE_HOME)/rdbms/demo \
                -I$(ORACLE_HOME)/rdbms/public \
                -I$(ORACLE_HOME)/plsql/public \
                -I$(ORACLE_HOME)/network/public \
                -I$(ORACLE_HOME)/precomp/public
ORACLE_LIBS=-L$(ORACLE_HOME)/lib
INC=$(ORACLE_INCLUDES)
LIB=$(ORACLE_LIBS) -lclntsh -locci -lpthread

CC_FLAGS=+DD64 -g -w -c
LD_FLAGS=+DD64 -g -w -o

ACC=aCC
PRG=test

SRCS=test.cpp
OBJS=$(SRCS:.cpp=.o)

$(PRG):.depend $(OBJS)
$(ACC) $(INC) $(LIB) $(LD_FLAGS) $@ $(OBJS) 

.cpp.o:
$(ACC) $(INC) $(CC_FLAGS) $<;

.depend:$(SRCS)
$(ACC) $(INC) $(CC_FLAGS) +make -E $(SRCS) > $@

-include .depend

.PHONY:clean
clean:
rm -f .depend $(OBJS) $(PRG)


现象:
编译链接时如果加入 -lpthread 会导致程序异常退出(string的析构发生错误),如果不加 -lpthread则没有问题

写的程序老异常退出,经过精简后发现只有这简单的几句就会复现问题,刚接触occi,再用户手册上也没看到有特殊要求的,有熟悉occi的帮帮忙啊
------解决方案--------------------
这是啥语言?C?
建议到相关语言板块提问,这个问题本身和数据库关系不大,只是不同语言实现方式不同
  相关解决方案