2016-10-19 2 views
1

드라이버가 문제없이 성공적으로 컴파일되었습니다. 나는 드라이버를 테스트하는 간단한 프로그램을 코딩했다. 기본적으로 다음 코드입니다 :MongoDB C++ 레거시 드라이버 1.1.2 작동하지 않음 - VS2013, Win 10, boost-1_62로 컴파일

static std::vector<mongo::HostAndPort> hosts = { mongo::HostAndPort("xxxxxxxx-a0.mlab.com:xxxxx"), mongo::HostAndPort("xxxxxxxx-a1.mlab.com:xxxxx") }; 
static mongo::DBClientReplicaSet con("rs-xxxxxxxx", hosts, 0); 


std::string errmsg; 
mongo::client::initialize(); 
con.connect(); 
con.auth("dbname", "userid", "password", errmsg); 

나는 문제없이 코드를 컴파일했습니다. exe가 bebug 모드에서 시작할 수 없으므로 0xc000a200 오류가 발생합니다. 나는 전혀 디버그 할 수 없었다. 릴리스 모드에서는 시작시 바로 중지되었습니다.

Assertion failed: px != 0, file C:\Boost\include\boost-1_62\boost/smart_ptr/scoped_ptr.hpp, line 105 

그리고 오류 팝업이 있었다 : 나는 콘솔에 경고 향상이 있었다 눈치 내가 디버그를 선택할 수 있었고, 여기에 프로그램이 중지 된 위치입니다

MongoDB C++ Legacy Driver Error

가 - 마지막 replica_set_monitor.cpp 줄 :

void ReplicaSetMonitor::createIfNeeded(const string& name, const set<HostAndPort>& servers) { 
    LOG(3) << "ReplicaSetMonitor::createIfNeeded " << name; 
    boost::lock_guard<boost::mutex> lk(setsLock); 
    ReplicaSetMonitorPtr& m = sets[name]; 
    if (!m) 
     m = boost::make_shared<ReplicaSetMonitor>(name, servers); 
    // Don't need to hold the lifetime lock for safeGo as 
    // 1) we assume the monitor is created as the contract of this class is such that initialize() 
    // must have been called. 
    // 2) replicaSetMonitorWatcher synchronizes safeGo internally using the _monitorMutex 
    replicaSetMonitorWatcher->safeGo(); 
} 

도와주세요! 고마워요!

답변

1

mongo::client::initialize전에을 호출해야 드라이버 개체 나 BSON을 구성 할 수 있습니다. 호출을 mongo::client::initialize 위의 DBClientReplicaSet 개체를 선언하는 위치로 이동하십시오.

+0

감사! 그게 다야! 하지만 지금은 예외가 있습니다 : – Harold

+0

'con.auth ("dbname", "userid", "password", errmsg); ': mongodrivertest.exe의 0x00007FFD87F77788에서 처리되지 않은 예외 : Microsoft C++ 예외 : mongo :: UserException이 메모리 위치 0x00000056C6FFF070에 있습니다. – Harold

+0

프로그램에 파산 : '부울 DBClientWithCommands :: 인증 (...을 << 이름 << saslCommandPasswordFieldName << << saslCommandDigestPasswordFieldName << digestPassword PASSWORD_TEXT));' – Harold