J'ai un problème auquel j'espère certains auront des réponses. Pour mon programme j'ai besoin de récupérer des données sur des pages web, et ça j'y arrive très bien :
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
manager->get(QNetworkRequest(QUrl("http://monsite.fr")));
QObject::connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(data(QNetworkReply*)));
Après investigation j'ai vu qu'il fallait installer OpenSSL et configurer son projet pour qu'il l'utilise car Qt ne le prend pas en charge par défaut. En effet, le code suivant :
J'ai donc lancé le Maintenance Tool depuis C:/Qt/MaintenanceTool.exe, et installé OpenSSL v.1.1.j (il veut la 1.1.1g d'après le retour précédent, mais "j" étant après "g" je suppose que c'est bon ?). Donc logiquement OpenSSL est installé !
Ensuite pour mon projet, dans le fichier .pro j'ai rajouté les lignes :
(d'ailleurs à ce sujet ça me parait bizarre d'avoir le .h... La lib doit être écrite en C, mais devrait pas y avoir une lib C++ ou alors avec Qt qui serait équivalente ? Ca me paraitrait plus "propre")
Et pour terminer j'ai inclu les deux fichiers .lib dans le dossier de l'exécutable, à savoir : libcrypto.lib et libssl.lib (bien que ça me paraisse également bizarre au vu des lignes ajoutées dans le .pro).
Et j'en suis au stade que toutes ces manip' n'ont absolument rien changé.
Grosse confusion sur le rôle de chaque fichier. Les .lib sont des fichiers pour les développeurs, des archives de fichiers objets ou bien des librairies d'import, ce n'est pas du code machine.
1. Il ne sert probablement à rien d'ajouter ces lignes dans LIBS, car elles font parties des dépendances de Qt (enfin j'utilise CMake, mais dans qmake ça doit aussi marcher). D'ailleurs je crois que Qt charge les dll d'OpenSSL au runtime, il n'y a aucune liaison.
2. Pour exécuter ton programme, tu as besoin des dll, pas des .lib
3. Tu n'as pas besoin de faire des inclusions directes des headers d'OpenSSL sauf si tu appelles directement son interface, ce qui m'étonnerait.
Déjà merci pour ta réponse. En effet je parlais bien des .dll que j'avais copié dans le dossier de l'exécutable, et non pas de .lib. Désolé pour cet étourderie.
Mais je confirme, j'ai toujours false qui est retourné avec la commande QSslSocket::supportsSsl()
Et concernant les commandes LIBS et l'include, en attendant je les met comme ça je peux me dire que si ça ne marche pas, ce n'est pas parce que j'ai oublié ces lignes. Au cas, quand ça fonctionnera je les enlèverai une à une voir si c'est vraiment inutile.
Quoiqu'il en soit, même avec les dll dans le dossier, OpenSSL n'est pas "détecté".
>même avec les dll dans le dossier, OpenSSL n'est pas "détecté".
Je crois que Qt a un mécanisme de chargement de Dll bien plus sophistiqué que de chopper bêtement les Dll (potentiellement plein de virus) qui traîneraient dans un répertoire osef, répertoire contenant l'exécutable compris.
Ca doit être marqué quelque-part dans la documentation.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Cependant je me suis un peu penché sur ta solution. Mais ça ne me paraît pas être la plus pratique. En effet, il faut :
créer un objet QLibrary pour chacune des dll
utiliser la méthode resolve pour utiliser la fonction de la dll
cette méthode renvoie un pointeur void* que l'on doit caster
et enfin je vais pouvoir utiliser la fonction voulue.
Bref ça me paraît bien lourd pour pas grand chose au final.
D'autant plus que quand j'avais cherché sur internet avant de poster ici, les gens n'allaient pas jusque là. Et la plupart des discussions sont marquées comme résolues. Alors je ne vois pas ce qu'il me manque
Il ne faut pas confondre ajouter SSL pour l'utiliser toi et pour que Qt l'utilise. Les include, includepath, QLibrary ou ProcMon, c'est pas pour que Qt utilise SSL. Donc pas ce que tu veux a priori.
Par contre, il faut que Qt puisse trouver les libs (les .dll). Pour cela :
- sois tu mets les libs dans le système
- sois tu ajoutes le chemin vers les libs dans PATH
- sois tu indiques a qmake de link ces libs
Ce que tu as voulu faire au début était presque correct, mais -L permet juste d'indiquer un chemin. Il faut aussi indiquer les libs a linker avec -l (L minuscule). Par exemple :
De mémoire, ce n'est pas très clair dans la doc de Qt. C'est expliqué je crois dans la doc de build de Qt. Mais un utilisateur lambda ne build (et ne doit pas) build Qt lui même. Donc ce n'est pas surprenant qu'il n'ait pas trouvé comment faire.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.