【问题标题】:Call to mongocxx::instance returns "mongoc: Failed to initialize OpenSSL"调用 mongocxx::instance 返回“mongoc: 无法初始化 OpenSSL”
【发布时间】:2018-08-17 16:19:18
【问题描述】:

我有一个非常简单的 MongoDB 应用程序,它连接到 MongoDB 数据库并且工作正常。

然后我将连接调用添加到一个大型、复杂的遗留应用程序中,当我调用时:

mongocxx::instance(即第一个 MongoDB 库调用)

我收到以下回复:

2018/08/16 10:20:59.0499: [16856]: ERROR: mongoc: Failed to initialize OpenSSL.

似乎在 MongoDB C 库中对 SSL_CTX_new 的低级调用返回了一个空指针。

我不太清楚为什么会这样。我什至已经针对大型遗留应用程序使用的所有库重新编译和链接我的简单 MongoDB 应用程序(对 ldd 的调用现在相同),但简单的应用程序仍然可以正常工作。

这是使用以下 MongoDB 驱动程序:

mongo-c-driver-1.11.0

mongo-cxx-driver-r3.3.0

使用 OpenSSL 1.1.0 在 RHEL7 box (7.4) 上编译和运行。

有什么建议吗?

【问题讨论】:

  • 我做了一些额外的挖掘(更改了底层 MongoDB 代码以打印出实际错误),我得到了这个:SSL routines:SSL_CTX_new:library has no ciphers:ssl/ssl_lib.c:2519:

标签: c++ mongodb


【解决方案1】:

我只是遇到了同样的错误。

它通过更改 cmake 的选项来解决它。 这样,设置一个选项,它就会起作用。

cmake -DENABLE_SSL=OFF ..

在以下方法中,会出现OpenSSL初始化错误。

cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP = NO

我想知道如何使用“ENABLE_AUTOMATIC_INIT_AND_CLEANUP”防止初始化错误。

https://github.com/mongodb/mongo-c-driver/blob/r1.10/NEWS#L935

https://github.com/mongodb/mongo-c-driver/blob/2edd3b2a91171a5da88e9282ffb6a3efbbc2bd91/src/libmongoc/CMakeLists.txt#L225

OpenSSL 的 make 解决了这个问题。

Why 'apt-get install openssl' did not install last version of OpenSSL?

我使用了以下。

  • openssl-1.1.0f
  • mongo-c-driver-1.10.1
  • mongo-cxx-driver-r3.3.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2017-02-16
    • 2020-11-18
    • 1970-01-01
    • 2017-09-10
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多