有一个定义QT_NO_SSL
,如果没有找到 Ssl 库,则定义该。还有方法QSslSocket::supportsSsl()
.
但是这两者有什么关系,它们是等价的吗?QT_NO_SSL <=> QSslSocket::supportsSsl() returns false
成立,或者是否有可能未定义QT_NO_SSL
,但QSslSocket::supportsSsl()
返回 false?
Qt(至少在OpenSSL后端)可以编译:
- 没有 SSL 支持 --
QT_NO_SSL
定义,SSL 类甚至不可用于编译; - 在运行时加载 SSL 支持 => OpenSSL 标头必须在编译时存在,但 QtNetwork 不会链接到
libssl
/libcrypto
/...; 相反,它将在运行时dlopen
这些库,以查找所需的功能; - 具有从QtNetwork链接的SSL支持。
其原因与将QtNetwork链接到加密库这一事实有关,在从美国/到美国的重新分发方面带来了法律问题。使用 #3,您必须拥有 SSL 库,否则即使您根本不需要 SSL,您的应用程序也无法启动;Qt安装程序无法"轻松"交付这些SSL库。因此,Qt在配置#2中编译,您有责任安装OpenSSL。
未定义QT_NO_SSL
但返回 false QSslSocket::supportsSsl()
的情况是 #2(例如,如果 Qt 找不到或加载合适的 SSL 库)。