44 votes

Construire libcurl avec le support SSL sous Windows

J'utilise libcurl dans une application Win32 C ++.

Le projet curllib.vcproj est ajouté à ma solution et les autres projets en dépendent.

Comment le construire avec le support SSL activé?

48voto

sharkin Points 4935

Eh bien, depuis ce post gravement échoué, j'ai dû creuser la question moi-même.

Découvrez également les autres réponses et commentaires pour plus d'infos concernant les autres versions, etc.

EDIT: Depuis que j'ai posté ce Q il semble y avoir déjà construite binaires mis à la disposition de la boucle page d'accueil. Découvrez James réponse.

Donc voilà:

-

Préprocesseur

Les deux symboles ont besoin d'être nourris pour le préprocesseur pour activer SSL pour libcurl:

USE_SSLEAY
USE_OPENSSL

(libcurl utilise OpenSSL pour la prise en charge SSL)

Sinon, les symboles peuvent être ajoutés directement dans un fichier appelé setup.h en libcurl, mais je ne suis pas trop heureux à propos de la modification de code dans la 3ème partie des distributions, sauf si j'ai vraiment besoin de.

La reconstruction de la librairie libcurl, j'ai maintenant quelques erreurs sur OpenSSL inclure les fichiers ne sont pas trouvés. Naturellement, puisque je n'ai pas configuré le OpenSSL distribution encore.

La compilation d'OpenSSL binaires

J'ai téléchargé le OpenSSL 0.9.8 source de distribution et déballé.

Dans la racine de la distribution de la source, il y a un fichier nommé INSTALL.W32 qui explique comment compiler le OpenSSL binaires. La construction de la chaîne nécessite perl, j'ai donc installé la dernière version de Spamassassin.

J'ai eu quelques difficultés avec la construction, qui pourraient ne pas être applicables à tous les systèmes, mais je vais passer par ici au cas où quelqu'un rencontre les mêmes.

Selon l'INSTALLER.W32:

Exécutez la ligne de commande suivante tâches avec répertoire en cours ensemble à la source de la distribution de la racine:

1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir

(Où "c:/some/openssl/dir" devrait être remplacé par le répertoire où la OpenSSL doit être installé. Ne pas utiliser d'espaces dans cette voie. La compilation plus loin va échouer dans ce cas)

2> ms\do_ms

Pour moi, cette étape a échoué à la première, car je n'avais pas les variables d'environnement OSVERSION et TARGETCPU. J'ai installé ces à 5.1.2600 et x86 respectivement. Vous pouvez obtenir plainte au sujet de OSVERSION être "fou", mais à y regarder de plus près, cette erreur est pour WinCE et n'affecte pas le Win32 l'installation. Pour obtenir votre version du système d'exploitation, exécutez l' 'ver' de la commande à partir d'une invite de commande ou d'exécuter winver.exe.

3> nmake -f ms\nt.mak (for static library)

ou

3> nmake -f ms\ntdll.mak (for DLL)

La source compile. A pris environ 5 minutes sur mon ordinateur portable.

Lorsque la compilation est terminée, le libs ou binaires ont été placés dans:

distroot/out32 - statique de la bibliothèque de construire

ou

distroot/out32dll - DLL construire

Des capacités et de liaison

Maintenant, retour à visual studio et le point de sortir les libs et le chemin pour les en-têtes. Les fichiers sont situés dans distroot/inc32/openssl.

N'oubliez pas d'ajouter libeay32.lib et ssleay32.lib que l'éditeur de liens d'entrée.

Reconstruire la libcurl projet.

Erreur!

Eh bien au moins pour moi avec cette version de OpenSSL. il s'est plaint de struct typedef dans l'un des OpenSSL en-têtes. Je ne pouvais pas trouver toutes les infos sur cette. Après une heure de recherche sur google je l'ai battu mon propre principe et commenté de la définition de type de l'OpenSSL en-tête, et heureusement libcurl n'était pas à l'aide de ce symbole, de sorte qu'il construit amende.

Mise à jour: Comme l'a souligné Jason, ce problème semble avoir disparu de la version 1.0.0 une.

Maintenant, pour confirmer que la prise en charge SSL est activé 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

Simple que cela.

9voto

James Points 135

Ce n’est peut-être pas la réponse que tout le monde cherche, mais je viens tout simplement de télécharger les dll précompilées à partir de ce lien disponible à l' adresse 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é correct .

5voto

GaMer13 Points 113

Lors de la compilation d'OpenSSL 1.0.0 sur Windows avec Visual Studio 2010, il a finalement jeté une erreur 0x2:

NMAKE : erreur fatale U1077: ""C:\Program Files (x86)\Microsoft Visual Studio 10.0 \VC\BIN\cl.EXE"' : code de retour "0 x 2'

Stop.

Il semble que cette erreur sera levée en raison d'un drapeau dans le perl de fichier de configuration, à savoir:- WX. Comme la documentation MSDN états:

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 assurera le moins possible de dur-à-trouver le code de défauts.

Après la suppression de l'-WX occurrences dans le fichier de configuration et de ré-entrer les commandes indiqué ici, il construit amende et a réussi tous les tests.

1voto

hemp Points 3202

Quelques remarques en réponse à et/ou en plus de ce qui précède..

Tout d'abord, si vous ne voulez pas salir avec ActivePerl, Strawberry Perl est formidable et a fonctionné parfaitement pour cela.

Deuxièmement, en lieu et place de l'aide do_ms.chauve-souris, je vous recommande préférant do_masm , si possible, car, selon l'INSTALLATION.W32,

C'est la peine de le faire car il sera résultat plus rapide code: par exemple, il habituellement 2 fois accélération dans le RSA routines.

Aussi, construire 0.9.8 l (L) d'OpenSSL a été un cauchemar, donc j'ai finalement abandonné et est revenue à 0.9.8 k qui a construit et un lien (statiquement) avec libcurl 1.9 sans problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X