J'utilise libcurl dans une application Win32 C++.
J'ai le projet curllib.vcproj ajouté à ma solution et défini mes autres projets pour en dépendre.
Comment le créer avec le support SSL activé?
Eh bien, comme ce message a échoué, j'ai dû creuser moi-même la question.
Consultez également les autres réponses et commentaires pour plus d'informations sur les autres versions, etc.
EDIT: Depuis que j'ai posté ce Q, il semble y avoir des binaires prêts à l'emploi disponibles sur la page d'accueil de curl. Découvrez réponse de James .
-
Préprocesseur
Les deux symboles suivants doivent être transmis au préprocesseur pour activer SSL pour libcurl:
USE_SSLEAY
USE_OPENSSL
(libcurl utilise OpenSSL pour le support SSL)
Alternativement, les symboles peuvent être ajoutés directement à un fichier appelé setup.h dans libcurl, mais je ne suis pas trop content de modifier le code dans les distributions tierces, sauf si je le dois vraiment.
En reconstruisant la bibliothèque libcurl, j'ai maintenant des erreurs concernant les fichiers inclus OpenSSL introuvables. Naturellement, puisque je n'ai pas encore correctement configuré la distribution OpenSSL.
Compilation des binaires OpenSSL
J'ai téléchargé la distribution source d'OpenSSL 0.9.8 et l'ai déballée.
À la racine de la distribution source, il y a un fichier appelé INSTALL.W32 qui décrit comment compiler les binaires OpenSSL. La chaîne de construction nécessite Perl, j'ai donc installé la dernière version d'ActivePerl.
J'ai eu quelques problèmes avec la construction, qui pourrait ne pas être applicable à tous les systèmes, mais je vais la parcourir ici au cas où quelqu'un éprouverait la même chose.
Selon INSTALL.W32:
Exécutez les tâches de ligne de commande suivantes avec le répertoire actuel défini sur la racine de distribution source:
1> Perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
(Où "c:/some/openssl/dir" doit être remplacé par le répertoire où OpenSSL doit être installé. N'utilisez pas d'espaces dans ce chemin. La compilation plus loin échouera dans ce cas)
2> ms\do_ms
Pour moi, cette étape a échoué au début, car il me manquait les variables d'environnement OSVERSION et TARGETCPU. Je les règle respectivement sur 5.1.2600 et x86. Vous pouvez vous plaindre d'OSVERSION étant "fou", mais regardez de plus près, cette erreur est pour WinCE et n'affecte pas la configuration de Win32. Pour obtenir la version de votre système d'exploitation, exécutez la commande "ver" à partir d'une invite de commande ou exécutez winver.exe.
3> nmake -f ms\nt.mak (for static library)
ou
3> nmake -f ms\ntdll.mak (for DLL)
La source compile maintenant. A pris environ 5 minutes sur mon ordinateur portable.
Une fois la compilation terminée, les bibliothèques ou les fichiers binaires ont été placés dans:
distroot/out32 - pour la construction d'une bibliothèque statique
ou
distroot/out32dll - pour DLL build
Création et liaison
Maintenant, revenons à Visual Studio et montrez les bibliothèques et incluez le chemin pour les en-têtes. Les fichiers include se trouvent dans distroot/inc32/openssl .
N'oubliez pas d'ajouter libeay32.lib et ssleay32.lib comme entrée de l'éditeur de liens.
Reconstruisez le projet libcurl.
Erreur!
Eh bien au moins pour moi avec cette version d'OpenSSL. il se plaignait d'un struct typedef dans l'un des en-têtes OpenSSL. Je n'ai trouvé aucune information à ce sujet. Après une heure de recherche sur Google, j'ai rompu mon propre principe et commenté le typedef de l'en-tête OpenSSL, et heureusement, libcurl n'utilisait pas ce symbole, donc cela a bien fonctionné.
Mise à jour: Comme l'a souligné Jason, ce problème semble avoir disparu depuis la version 1.0.0a.
Maintenant, pour confirmer que la prise en charge SSL est activée pour libcurl, exécutez le code suivant:
curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
// SSL support enabled
else
// No SSL
Aussi simple que cela.
Peut-être que ce n'est pas la réponse que quelqu'un cherche, mais je viens de télécharger les DLL précompilées à partir de ce lien trouvé à http://curl.haxx.se/download.html
J'ai exécuté le test fourni par sharkin et if( vinfo->features & CURL_VERSION_SSL )
s'est avéré être vrai.
Suivant les conseils de Robert Oschler, voici mon commentaire sur la question comme réponse:
Vous pouvez créer une libcurl récente (2012) avec une prise en charge SSL native pour les fenêtres en utilisant les symboles du préprocesseur: USE_WINDOWS_SSPI et USE_SCHANNEL au lieu de ceux d'OpenSSL.
Lors de la compilation d'OpenSSL 1.0.0 sous Windows avec Visual Studio 2010, il a finalement généré une erreur 0x2:
NMAKE: erreur fatale U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"': code retour '0x2'
Arrêtez.
Il semble que cette erreur sera levée à cause d'un indicateur dans le fichier Perl Configure, à savoir -WX. Comme l'indique la documentation MSDN:
Traite tous les avertissements du compilateur comme des erreurs. Pour un nouveau projet, il peut être préférable d'utiliser/WX dans toutes les compilations; la résolution de tous les avertissements garantira le moins de défauts de code difficiles à trouver.
Après avoir supprimé les occurrences -WX dans le fichier de configuration et ressaisi les commandes indiquées ici il s'est bien construit et a passé tous les tests.
Dans mon cas, suivez le curl README était suffisant.
Ma configuration est la suivante:
curl-7.57.0\projects
openssl
, mettez-le de côté le dossier curl , ceci est important car vous ouvrirez le projet VS qui attendez-vous à y trouver openssl.build-openssl.bat
pour effectuer la compilation de openSSL. Avec mes paramètres, cela est devenu le suivant:.\build-openssl.bat vc14 x64 release ..\..\openssl\
.\build-openssl.bat -help
pour en savoir plus sur les paramètres.openssl\build\Win64
curl-7.57.0\projects\Windows\VC14\curl-all.sln
LIB Release - LIB OpenSSL
dans mon cas)curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib
CURL_STATICLIB
préprocesseur dans votre propre projetCURL_DISABLE_LDAP
avant vous compilez libcurl.\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code
Cette erreur peut être résolue en exécutant vcvarsall.bat dans Visual Studio.
Si vous construisez avec Visual Studio IDE et obtenez 58 avertissements impairs comme
"liaison dll incohérente curl_global_init/curl_msnprintf/..."
vous devez ajouter CURL_STATICLIB aux définitions de préprocesseur.
donc toute la ligne de définition devrait ressembler à:
USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB.
Avec cela, tout l'avertissement disparaîtra.
Certains ignoreraient les avertissements et continueraient à utiliser les bibliothèques, mais obtiendraient alors les * error * s correspondantes comme curl_global_init/curl_msnprintf. Cela peut être très ennuyeux.
J'espère que cela peut aider quelqu'un.
Quelques notes en réponse et/ou en plus de ce qui précède.
Tout d'abord, si vous ne voulez pas jouer avec ActivePerl, Strawberry Perl est formidable et a parfaitement fonctionné pour cela.
Deuxièmement, au lieu d'utiliser do_ms . Bat, je recommanderais de préférer do_masm si possible car, selon INSTALL.W32,
Cela vaut la peine car cela entraînera un code plus rapide: par exemple, cela entraînera généralement une accélération de 2 fois dans les routines RSA.
Aussi, construire 0.9.8l (L) d'OpenSSL était un cauchemar donc j'ai finalement abandonné et suis revenu à 0.9.8k qui a construit et lié (statiquement) avec libcurl 1.9 sans problème.
Accédez à la page de téléchargement de libcurl et téléchargez le fichier Zip sous Archives sources . Dans mon cas, il s'appelle curl-7.58.0.Zip
Extrayez l'archive et ouvrez projects/Windows/VC15/curl_all.sln
avec Visual Studio.
Téléchargez le binaire Windows d'OpenSSL. Dans mon cas, j'ai téléchargé le fichier d'installation de Windows Win32 OpenSSL v1.1.0g
de la distribution Shining Light Productions .
Le dossier d'installation pour moi est C:\OpenSSL-Win32
.
Dans le curl_all.sln
Fichier de solution Visual Studio, changez la configuration de build en DLL Debug - DLL OpenSSL
.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet curl
et accédez à Propriétés.
Sous Linker -> General
modifier Additional Library Directories
et ajoutez le chemin d'accès à votre OpenSSL directory + \lib
. Dans mon cas, c'est C:\OpenSSL-Win32\lib
.
Appliquez et fermez la fenêtre des propriétés.
Cliquez avec le bouton droit sur le projet libcurl
et faites la même chose que l'étape précédente, ajoutez OpenSSL directory + \lib
à Additional Library Directories
sous Linker -> General
.
Sous C/C++ -> General
, ajouter C:\OpenSSL-Win32\include
à la Additional Include Directories
.
Allez enfin à Linker -> Input
et modifier Additional Dependencies
. Remplacez tous les fichiers lib par ce qui suit:
ws2_32.lib
wldap32.lib
openssl.lib
libssl.lib
libcrypto.lib
Appliquez et fermez la fenêtre des propriétés.
Avec le DLL Debug - DLL OpenSSL
configuration de build toujours sélectionnée, allez à Build -> Build Solution
.
Copiez les deux fichiers dll libcrypto-1_1.dll
et libssl-1_1.dll
depuis le répertoire bin d'OpenSSL (C:\OpenSSL-Win32\bin
) dans le répertoire de construction que vous venez de créer curl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL
.
Dans le répertoire de construction, exécutez curld.exe
. S'il s'exécute sans erreur (dll manquante, etc.), votre génération a réussi.