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



有一个定义QT_NO_SSL,如果没有找到 Ssl 库,则定义该。还有方法QSslSocket::supportsSsl().

但是这两者有什么关系,它们是等价的吗?QT_NO_SSL <=> QSslSocket::supportsSsl() returns false成立,或者是否有可能未定义QT_NO_SSL,但QSslSocket::supportsSsl()返回 false?

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_SSL但返回 false QSslSocket::supportsSsl()的情况是 #2(例如,如果 Qt 找不到或加载合适的 SSL 库)。

相关内容

  • 没有找到相关文章

最新更新