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

09-03 17:34