有一个定义 QT_NO_SSL
,如果没有找到 Ssl 库,则定义。还有方法 QSslSocket::supportsSsl()
.
但这两者有什么关系,它们是等价的吗?是否QT_NO_SSL <=> QSslSocket::supportsSsl() returns false
持有还是有可能QT_NO_SSL
未定义,但 QSslSocket::supportsSsl()
返回错误?
可以编译 Qt(至少有 OpenSSL 后端):
- 没有 SSL 支持 --
QT_NO_SSL
定义,SSL 类甚至不可用于编译;
- 在运行时加载 SSL 支持 => 编译时必须存在 OpenSSL header ,但 QtNetwork 不会链接到
libssl
/libcrypto
/...;相反,它会在运行时dlopen
那些库来寻找它需要的功能;
- 具有从 QtNetwork 链接的 SSL 支持。
之所以如此,是因为将 QtNetwork 链接到加密库会在从/向美国重新分发方面引发法律问题。对于#3,您必须拥有 SSL 库,否则您的应用程序将无法启动,即使您根本不需要 SSL;并且 Qt 安装程序无法“轻松”运送这些 SSL 库。因此,Qt 在配置 #2 中编译,您有责任安装 OpenSSL。
QT_NO_SSL
未定义但 QSslSocket::supportsSsl()
返回 false 的场景是 #2(例如,如果 Qt 无法找到或加载合适的 SSL库)。
我是一名优秀的程序员,十分优秀!