3

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

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

4

1 回答 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_SSL未定义但返回 false的场景QSslSocket::supportsSsl()是 #2(例如,如果 Qt 无法找到或加载合适的 SSL 库)。

于 2016-01-27T11:53:50.803 回答