2015-06-05 5 views
2

У меня есть еще одна проблема с конфигурациями библиотек MongoDB и Boost.xCode MongoDB Exec Плохой доступ

Теперь, кажется, что все нормально, но когда я пытаюсь запустить мой простой проект:

#include <iostream> 

#include <mongo/client/dbclient.h> 

int main(int argc, const char * argv[]) 
{ 
    //try Mongo 
    mongo::client::initialize(); 
    try { 
     mongo::DBClientConnection c; 
     c.connect("localhost"); 

     std::cout << "connected ok" << std::endl; 
    } catch(const mongo::DBException &e) { 
     std::cout << "caught " << e.what() << std::endl; 
    } 

    return EXIT_SUCCESS; 
} 

я получаю Exec Bad Access на c.connect линии.

Это скриншоте Screenshot

EDIT: Я бегу MongoDB SCons с этой командой:

scons --prefix=$HOME/mongo-client-install --extrapath=/Users/Wildregar/boost/ --osx-version-min=10.9 install 

и в Xcode в стандартной библиотеки C++ У меня есть

libc++ 
+0

Такая же проблема для меня. Я проверил, что моя программа, boost и libmongoclient создаются с помощью libC++ с использованием otool. Но как проверить, какой языковой диалект используется? В XCode мой код скомпилирован с использованием -std = gnu ++ 11 – Marco

ответ

0

Во-первых, лучше, если вы разместите свой пример как полностью компилируемый пример. Однако, когда я добавил необходимый include и завернул его в функцию main(), ваш примерный код работал для меня против недавно созданного устаревшего драйвера.

Как правило, подобные сбои являются результатом несоответствия стандартного уровня языка (например, C++ 11 vs C++ 03) среди приложений, библиотеки ускорения или libmongoclient или несоответствия времени выполнения C++ где некоторые из тех же компонентов связаны с libstdC++, а другие - с libC++.

Как правило, все компоненты (приложение, библиотеки ускорения и драйвер) должны быть совместимы с языком стандартного уровня и библиотекой времени выполнения C++.

+0

Сообщение отредактировано с моим полным примером. Эм, что я должен делать? –

+0

Можете ли вы подтвердить, что ваше приложение, boost и драйвер построены с одним и тем же аргументом --std = и связаны ли они с одной и той же библиотекой времени выполнения C++ (libC++ vs libstdC++)? – acm

+0

Я запускаю mongodb scons с помощью этой команды: «scons --prefix = $ HOME/mongo-client-install --extrapath =/Пользователи/Wildregar/boost/--osx-version-min = 10.9 install» и в xCode в C++ Стандартная библиотека У меня есть «libC++» –

0

Решено. Как указано в @acm, проблема связана с Языковым диалектом. Хотя official documentation предлагает компилировать с помощью

scons --prefix=$HOME/mongo-client-install --osx-version-min=10.9 install 

это плохая идея, так как C++ 03 диалекте используется по умолчанию.

Вместо этого используйте

scons --prefix=$HOME/mongo-client-install --c++11="on" --osx-version-min=10.9 install 

и это должно решить проблему.

Смежные вопросы