3

QT_NO_SSLSsl ライブラリが見つからない場合に定義されるdefine があります。方法 も ありQSslSocket::supportsSsl()ます .

しかし、これら 2 つはどのように関連しており、同等なのでしょうか? 保持されますか、または定義されていないQT_NO_SSL <=> QSslSocket::supportsSsl() returns false可能性がありますが、 false を返しますか?QT_NO_SSLQSslSocket::supportsSsl()

4

1 に答える 1

4

Qt (少なくとも OpenSSL バックエンドを使用) はコンパイルできます。

  1. SSL サポートなし --QT_NO_SSL定義された SSL クラスは、コンパイルにも使用できません。
  2. 実行時に SSL サポートが読み込まれる => コンパイル時に OpenSSL ヘッダーが存在する必要がありますが、QtNetwork はlibssl/ libcrypto/... にリンクしません。代わりに、dlopen実行時にこれらのライブラリが必要な関数を探します。
  3. QtNetwork からリンクされた SSL サポート付き。

この理由は、QtNetwork を暗号化ライブラリにリンクすると、米国との間の再配布に関して法的な問題が発生するという事実に関係しています。#3では、SSLライブラリが必要です。そうしないと、SSLがまったく必要ない場合でも、アプリケーションが起動しません。また、Qt インストーラーはこれらの SSL ライブラリを「簡単に」出荷することはできません。代わりに、Qt は構成 #2 でコンパイルされ、OpenSSL をインストールする責任があります

QT_NO_SSLが定義されていないのに false を返すシナリオQSslSocket::supportsSsl()は #2 です (たとえば、Qt が適切な SSL ライブラリの検索または読み込みに失敗した場合)。

于 2016-01-27T11:53:50.803 に答える