QT_NO_SSL和QSslSocket::supportsSsl()之间的关系

3
有一个定义为QT_NO_SSL的宏,如果没有找到Ssl库,则会被定义。 还有一个方法QSslSocket::supportsSsl()
但是这两者之间有什么关系,它们是否等价? QT_NO_SSL <=> QSslSocket::supportsSsl()返回false吗?或者可能存在QT_NO_SSL未定义,但是QSslSocket::supportsSsl()返回false的情况吗?
1个回答

4
Qt(至少使用OpenSSL后端)可以编译成以下三种配置之一:
  1. 没有SSL支持 - 定义了QT_NO_SSL,SSL类甚至不可用于编译;
  2. 在运行时加载SSL支持 => 必须在编译时存在OpenSSL头文件,但QtNetwork不会链接到libssl/libcrypto/...。相反,它将在运行时使用dlopen查找所需的函数;
  3. 链接QtNetwork中的SSL支持。
这是因为将QtNetwork链接到加密库会在美国的再分发方面引起法律问题。对于#3,您必须拥有SSL库,否则您的应用程序将无法启动,即使您根本不需要SSL。并且Qt安装程序不能“轻松”地发送这些SSL库。因此,Qt以配置#2进行编译,而负责安装OpenSSL。 当未定义QT_NO_SSLQSslSocket::supportsSsl()返回false时,情况#2适用(例如,如果Qt无法找到或加载合适的SSL库)。

所以你确实需要两者来确保支持SSL。谢谢! - Ayonix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接