Связь между QT_NO_SSL и QSslSocket::supportSsl()
Есть определение QT_NO_SSL
, это определяется, если не была найдена библиотека Ssl. Там также есть метод QSslSocket::supportsSsl()
,
Но как эти два связаны, они эквивалентны? Есть ли QT_NO_SSL <=> QSslSocket::supportsSsl() returns false
держать или это возможно, что QT_NO_SSL
не определено, но QSslSocket::supportsSsl()
возвращает ложь?
1 ответ
Qt (по крайней мере, с бэкэндом OpenSSL) можно скомпилировать:
- без поддержки SSL -
QT_NO_SSL
определены, классы SSL, даже недоступные для компиляции; - с поддержкой SSL, загруженной во время выполнения => заголовки OpenSSL должны присутствовать во время компиляции, но QtNetwork не будет ссылаться на
libssl
/libcrypto
/...; вместо этогоdlopen
эти библиотеки во время выполнения ищут нужные функции; - с поддержкой SSL, связанной с QtNetwork.
Причина этого связана с тем, что подключение QtNetwork к криптографической библиотеке открывает правовые проблемы с точки зрения перераспределения из / в США. С #3 у вас должны быть библиотеки SSL, иначе ваше приложение не запустится, даже если вам вообще не нужен SSL; и установщики Qt не могут "легко" отправить эти библиотеки SSL. Таким образом, вместо этого Qt компилируется в конфигурации #2, и вы отвечаете за установку OpenSSL.
Сценарий, в котором QT_NO_SSL
не определено, но QSslSocket::supportsSsl()
возвращает false #2 (например, если Qt не может найти или загрузить подходящую библиотеку SSL).