Pourquoi est-QsslSocket travail avec Qt 5.3 mais pas Qt 5.7 sur Debian Étirer?
J'ai une application qui utilise le QWebSocket classe mais pas SSL. Il fonctionne très bien lorsque j'exécute une version compilé avec Qt 5.3 mais un Qt 5.7 exécutable se fige sur les avertissements suivants:
QSslSocket: cannot resolve CRYPTO_num_locks
QSslSocket: cannot resolve CRYPTO_set_id_callback
QSslSocket: cannot resolve CRYPTO_set_locking_callback
QSslSocket: cannot resolve ERR_free_strings
QSslSocket: cannot resolve EVP_CIPHER_CTX_cleanup
QSslSocket: cannot resolve EVP_CIPHER_CTX_init
QSslSocket: cannot resolve sk_new_null
QSslSocket: cannot resolve sk_push
QSslSocket: cannot resolve sk_free
QSslSocket: cannot resolve sk_num
QSslSocket: cannot resolve sk_pop_free
QSslSocket: cannot resolve sk_value
QSslSocket: cannot resolve SSL_library_init
QSslSocket: cannot resolve SSL_load_error_strings
QSslSocket: cannot resolve SSL_get_ex_new_index
QSslSocket: cannot resolve SSLv2_client_method
QSslSocket: cannot resolve SSLv3_client_method
QSslSocket: cannot resolve SSLv23_client_method
QSslSocket: cannot resolve SSLv2_server_method
QSslSocket: cannot resolve SSLv3_server_method
QSslSocket: cannot resolve SSLv23_server_method
QSslSocket: cannot resolve X509_STORE_CTX_get_chain
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
QSslSocket: cannot resolve SSLeay
QSslSocket: cannot resolve SSLeay_version
QSslSocket: cannot call unresolved function CRYPTO_num_locks
QSslSocket: cannot call unresolved function CRYPTO_set_id_callback
QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function sk_num
Je ne suis pas le voir ces avertissements dans la version 5.3 (qui fonctionne correctement), ce qui suggère que je ne doit pas les ignorer, comme demandé dans cette question. Aussi, QT += network
est déjà dans ma src.pro.
J'ai été amené à croire que Debian a chuté de ces symboles à partir du paquet openssl. Quelqu'un pourrait-il me dire ce qu'il se passe ici, et comment je pourrais résoudre ce problème?
Système d'information
Je suis en cours d'exécution sur Debian stretch
$ uname -r
4.8.0-2-amd64
J'ai d'openssl et de libssl-dev installé
openssl is already the newest version (1.1.0c-2).
libssl-dev is already the newest version (1.1.0c-2).
J'ai essayé de lancer ce avec Qt 5.3 et 5.7
$ qmake -v
QMake version 3.0
Using Qt version 5.7.1 in /usr/lib/x86_64-linux-gnu
OriginalL'auteur 7hibault | 2017-02-07
Vous devez vous connecter pour publier un commentaire.
TL;DR
Debian Stretch est livré avec OpenSSL 1.1; Qt utilise OpenSSL 1.0; donner Qt ce dont il a besoin:
Réponse détaillée
De cette répondre au sujet de OpenSSL et Qt, j'ai trouvé une astuce et j'ai affiché SSL version de bibliothèque utilisé pour la compilation et à l'exécution à l'aide de:
Et il affiche:
Mais Debian Stretch est livré avec OpenSSL 1.1. Comme prévu, tous les threads sur le Web à propos de ce problème sont remplies: c'est une bibliothèque OpenSSL version de problème de compatibilité.
I", apt install libssl1.0-dev" et le problème a été résolu. J'ai encore 2 SSL avertissements au sujet de SSLv3, mais au moins, ce n'est qu'un avertissement (j'ai lu quelque chose sur le Web à ce sujet, pas moyen de le retrouver).
Résumé
Jusqu'à ce que Qt supporte OpenSSL 1.1, vous pouvez soit:
Chers 7hibault, votre commentaire doit être accepté de répondre, tu m'as sauvé de toute la semaine! MERCI!
Ceux qDebug lignes ont le truc pour moi de comprendre de quelle version de OpenSSL mon Qt a été construit avec sur Windows pour résoudre l'Enfer des DLL. Plus précisément,
QSslSocket::sslLibraryBuildVersionString()
était le billet.OriginalL'auteur Fylhan
J'ai eu le même problème sur une debian stretch serveur. Je l'ai réparé avec l'aide de 7hibaults commentaire.
L'exécution de la commande ci-dessous résolu le problème pour moi:
sudo apt-get install libssl1.0-dev
je vous remercie. a fonctionné pour moi sur ubuntu 18.04
OriginalL'auteur user3733632
Fylhan réponse ne fonctionne pas sous Debian Buster comme libssl1.0-dev est un paquet de transition et n'est pas supportée.
Il y a un rapport de bug sur l'intervalle Qt du Site web et de Giuseppe d'Angelo commentaire il existe des solutions de contournement suivantes :
J'ai pu résoudre le problème en utilisant la deuxième solution, les commandes détaillées ci-dessous dans mon cas:
mkdir openssl1.0 ; cd openssl1.0
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 libssl.so.1.0.2
ln -s libssl.so.1.0.2 libssl.so
LD_LIBRARY_PATH="/path/to/dir/openssl1.0"
avant votre commande à partir de la console)Vous pourriez avoir besoin de faire la même chose avec libcrypto.de cette manière, mais c'était assez pour moi. Cette solution vous empêche de modifier les liens symboliques pour l'ensemble du système.
OriginalL'auteur Arnaud M.
Vous devez installer le paquet suivant afin de résoudre le problème.
sudo apt install libssl1.0-dev
OriginalL'auteur Sougata Pal
Vous devez changer ce liens symboliques:
dans /usr/lib/x86_64-linux-gnu
forme:
libcrypto.donc -> libcrypto..1.1
libssl.donc -> libssl..1.1
:
libcrypto.donc -> libcrypto..1.0.2
libssl.donc -> libssl..1.0.2
Oui, mais jusqu'à aujourd'hui, vous avez des options plus
Je suis en désaccord. Il y a au moins les 4 options décrites dans ma réponse. Et ce n'est pas exhaustive.
la nouvelle lib a une grande liste de fonctions supprimées/obsolète, si un lien ne va pas résoudre quoi que ce soit, lors du démarrage de l'application, ces fonctions ne seront pas encore trouvé!!!
OriginalL'auteur blackmoon