Связь между 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) можно скомпилировать:

  1. без поддержки SSL - QT_NO_SSL определены, классы SSL, даже недоступные для компиляции;
  2. с поддержкой SSL, загруженной во время выполнения => заголовки OpenSSL должны присутствовать во время компиляции, но QtNetwork не будет ссылаться на libssl / libcrypto /...; вместо этого dlopen эти библиотеки во время выполнения ищут нужные функции;
  3. с поддержкой SSL, связанной с QtNetwork.

Причина этого связана с тем, что подключение QtNetwork к криптографической библиотеке открывает правовые проблемы с точки зрения перераспределения из / в США. С #3 у вас должны быть библиотеки SSL, иначе ваше приложение не запустится, даже если вам вообще не нужен SSL; и установщики Qt не могут "легко" отправить эти библиотеки SSL. Таким образом, вместо этого Qt компилируется в конфигурации #2, и вы отвечаете за установку OpenSSL.

Сценарий, в котором QT_NO_SSL не определено, но QSslSocket::supportsSsl() возвращает false #2 (например, если Qt не может найти или загрузить подходящую библиотеку SSL).

Другие вопросы по тегам