将mongocxx连接到mongodb服务器时出错:SSL支持不可用

时间:2019-07-10 19:28:16

标签: c++ mongodb ssl mongo-cxx-driver

使用mongocxx 3.3或mongo cxx 3.4稳定版本,我试图连接到mongo地图集实例。这是我的基本代码:

#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 fails to connect to mongoDB with SSL

我总是有以下错误:

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

1 个答案:

答案 0 :(得分:1)

您收到此错误,因为C和C ++驱动程序中的一个或两个都配置为没有SSL支持。 C ++驱动程序内部版本默认为SSL支持(寻找MONGOCXX_ENABLE_SSL CMake选项)。因此,最可能的解释是底层C驱动程序是在没有SSL的情况下构建的,第二种最可能的解释是C驱动程序的确内置了SSL支持,但是在构建C ++驱动程序时已将其明确设置为off。您可以通过在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

当然,您应该使用安装C驱动程序的实际位置替换上面包含目录的路径。

如果在其中看到#define MONGOC_ENABLE_SSL 1以外的任何内容,则说明您的C驱动程序未启用SSL支持,因此您需要对其进行重建以使其具有此功能。