如果编译了OpenSLL 同 的 OPENSSL_NO_SRTP 强> 然后 ssleay32.dll 不包含与SRTP supprt相关的功能: SSL_CTX_set_tlsext_use_srtp , SSL_get_selected_srtp_profile , SSL_set_tlsext_use_srtp , SSL_get_srtp_profiles 。幸运的是,他们的名字都有“srtp”,所以你可以检查DLL是否包含这些函数 的 DUMPBIN 强> 。例如:
SSL_CTX_set_tlsext_use_srtp
SSL_get_selected_srtp_profile
SSL_set_tlsext_use_srtp
SSL_get_srtp_profiles
dumpbin.exe /EXPORTS ssleay32.dll | findstr /R /C:"srtp"
在我的情况下,它找到这些函数,所以我的OpenSSL编译 的 无 强> OPENSSL_NO_SRTP :
dumpbin.exe /EXPORTS ssleay32.dll | findstr /R /C:"srtp" 358 57 00026CD0 SSL_CTX_set_tlsext_use_srtp 357 AA 00026D00 SSL_get_selected_srtp_profile 360 B4 00026D10 SSL_get_srtp_profiles 354 E8 00026D40 SSL_set_tlsext_use_srtp
我希望这有助于解决您的问题。
附: 不幸的是,据我所知,OpenSSL不记录编译时选项。
感谢@sirgeorge的回答。我忘了将Linux指定为平台,因此Linux中的等效检查是:
$ objdump -f libssl.so -x | grep -i SRTP 0000000000000000 l df *ABS* 0000000000000000 d1_srtp.c 00000000002609e0 l O .data 0000000000000030 srtp_known_profiles 000000000003d100 g F .text 0000000000000012 SSL_set_tlsext_use_srtp 000000000003cb40 g F .text 0000000000000149 ssl_parse_serverhello_use_srtp_ext 000000000003d120 g F .text 0000000000000012 SSL_CTX_set_tlsext_use_srtp 000000000003ca90 g F .text 00000000000000ab ssl_add_serverhello_use_srtp_ext 000000000003ca50 g F .text 0000000000000029 SSL_get_srtp_profiles 000000000003ca80 g F .text 0000000000000008 SSL_get_selected_srtp_profile 000000000003cc90 g F .text 0000000000000128 ssl_add_clienthello_use_srtp_ext 000000000003cdc0 g F .text 0000000000000210 ssl_parse_clienthello_use_srtp_ext
您可以获得有关已安装的大多数(全部?)配置信息 openssl 通过 version 命令 。特别是,
openssl
version
openssl version -f
将列出在构建时指定的所有编译器标志。