使用 openssl 而不是 boringssl 时使用 webrtc 构建错误

Build errors with webrtc when using openssl instead of boringssl

我正在尝试使用 openssl 而不是 boringssl 构建 webrtc 的稳定分支 57。这是我的命令:

gn gen out/Default --args="is_component_build=false rtc_build_ssl=false rtc_ssl_root=""C:\DevThirdParty\openssl-1.0.2k"""
ninja -C out/Default

但是,构建中途失败并出现以下错误:

[12/1633] CXX obj/webrtc/base/rtc_base/opensslstreamadapter.obj
FAILED: obj/webrtc/base/rtc_base/opensslstreamadapter.obj
ninja -t msvc -e environment.x64 -- "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64/cl.exe" /nologo /showIncludes /FC @obj/webrtc/base/rtc_base/opensslstreamadapter.obj.rsp /c ../../webrtc/base/opensslstreamadapter.cc /Foobj/webrtc/base/rtc_base/opensslstreamadapter.obj /Fd"obj/webrtc/base/rtc_base_cc.pdb"
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(139): error C2143: syntax error: missing ';' before '*'
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(139): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(139): error C2238: unexpected token(s) preceding ';'
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(143): error C2143: syntax error: missing ';' before '*'
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(143): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(143): error C2238: unexpected token(s) preceding ';'
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(254): error C3646: 'rbuf': unknown override specifier
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(254): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(255): error C3646: 'rrec': unknown override specifier
c:\devthirdparty\openssl-1.0.2k\openssl\dtls1.h(255): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
[21/1633] CXX obj/webrtc/modules/modules_tests/screen_capturer_integration_test.obj
ninja: build stopped: subcommand failed.

这是来自 dtls1.h 的代码片段:

struct dtls1_retransmit_state {
    EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
    EVP_MD_CTX *write_hash;     /* used for mac generation */
#  ifndef OPENSSL_NO_COMP
    COMP_CTX *compress;         /* compression */   <=== LINE 139
#  else
    char *compress;
#  endif
    SSL_SESSION *session;                            <== LINE 143
    unsigned short epoch;
};

我还缺少其他步骤吗?问候。

原来问题出在 WebRtc 的 opensslstreamadapter.cc 文件中。包括列为:

#include <openssl/dtls1.h>
#include <openssl/ssl.h>

颠倒顺序编译成功