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