1

我正在尝试使用WebRTC并偶然发现了令人讨厌的问题。同时使用两者:

BoringSSLthird_party用于WebRTC)和boost::uuid由于 X509 重新定义问题,我无法编译我的解决方案。

问题:

BoringSSL 自己定义 X509,所以当我通过自己定义的 boost::uuid 链接 wincrypt.h 时,会出现重新定义问题。每次您尝试使用wincrypt.h或任何其他third_party依赖于它的WebRTC时都会出现此问题。

解决方案:

  1. 我可能会使用 boost::uuid 以外的其他东西

  2. 我可以在BoringSSL文件base.h中添加#undef预处理宏:

#ifdef CRYPT
    #undef X509_NAME
    #undef X509_CERT_PAIR
    #undef X509_EXTENSIONS
#endif

这样您就可以在项目的 CMake 中使用

add_definitions(-DCRYPT)

问题将立即得到解决。标志名称无关紧要,只是示例。

我的第二个解决方案更可取,我希望将它包含在 WebRTC 的 BoringSSL 的更多版本中。在 BoringSSL 网站上有一条信息表明:

程序在使用 BoringSSL 时会提供自己的副本,我们会在决定进行 API 更改时根据需要更新所有内容。这使我们能够在很大程度上避免以兼容性为名的妥协。它适用于我们,但它可能不适合您。

我的问题:

这句话是否意味着 WebRTC 以某种方式发布了 BoringSSL 的独特版本?

如果是这样,我应该在哪里解决我的问题?我想做出贡献,以便将来帮助其他人,但我不确定 WebRTC 回购在哪里?去无聊的SSL?

提前感谢您为我清理它。

4

1 回答 1

1

Boost.Asio 依赖于 OpenSSL 库。OpenSSL 和 BoringSSL 不兼容也就不足为奇了。放置#ifdef CRYPT您建议的石膏实际上可能会掩盖更严重的不兼容问题。我相信正确的方法是使用 OpenSSL 编译 WebRTC,或者对所有项目使用 BoringSSL,就像nghttp2 那样

于 2019-04-12T20:13:34.000 回答