Ошибка подключения mongocxx к серверу mongodb: поддержка SSL недоступна - PullRequest
2 голосов
/ 10 июля 2019

Используя стабильные версии mongocxx 3.3 или mongo cxx 3.4, я пытаюсь подключиться к экземпляру mongo atlas. Это мой основной код:

#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>

mongocxx::instance inst{};    
mongocxx::uri uri = mongocxx::uri("mongodb+srv://...");
mongocxx::client conn(uri);
mongocxx::database db = conn["test"];

И я протестировал несколько альтернатив, таких как использование опций клиента (как описано здесь: http://mongocxx.org/mongocxx-v3/configuration/),, а также установка пути к файлу pem, как объяснено здесь: Mongocxx не может подключиться к mongoDB с SSL .

У меня всегда возникает следующая ошибка:

terminate called after throwing an instance of 'mongocxx::v_noabi::exception'
what():  SSL support not available
Aborted (core dumped)

1 Ответ

1 голос
/ 10 июля 2019

Вы получили эту ошибку, потому что один или оба драйвера C и C ++ были настроены без поддержки SSL.В сборке драйвера C ++ по умолчанию используется поддержка SSL (ищите опцию MONGOCXX_ENABLE_SSL CMake).Таким образом, наиболее вероятное объяснение состоит в том, что лежащий в основе драйвер C был создан без SSL, а второе наиболее вероятное объяснение состоит в том, что драйвер C действительно имеет встроенную поддержку SSL, но он был явно отключен при сборке драйвера C ++.Вы можете проверить состояние драйвера C, посмотрев значение MONGOC_ENABLE_SSL в заголовках драйверов C.Если он включен, он должен выглядеть следующим образом:

$ find /usr/local/Cellar/mongo-c-driver/1.14.0/include -type f -name "*.h" | xargs grep 'MONGOC_ENABLE_SSL '
/usr/local/Cellar/mongo-c-driver/1.14.0/include/libmongoc-1.0/mongoc/mongoc-config.h: * MONGOC_ENABLE_SSL is set from configure to determine if we are
/usr/local/Cellar/mongo-c-driver/1.14.0/include/libmongoc-1.0/mongoc/mongoc-config.h:#define MONGOC_ENABLE_SSL 1
/usr/local/Cellar/mongo-c-driver/1.14.0/include/libmongoc-1.0/mongoc/mongoc-config.h:#if MONGOC_ENABLE_SSL != 1

Конечно, вы должны заменить путь к каталогу include, указанному выше, на фактическое местоположение, в котором установлен драйвер C.

Если вы видите там что-то отличное от #define MONGOC_ENABLE_SSL 1, то в вашем драйвере C не включена поддержка SSL, и вам нужно будет перестроить его, чтобы оно имело.

...