Compiler OpenSSL avec MinGW sous Windows
Vous souhaitez compiler OpenSSL avec le compilateur libre MinGW sous Windows ? Ce guide est fait pour vous. Nous verrons comment compiler et installer OpenSSL, comment compiler un programme en statique et en dynamique.
Installation de MinGW pour Windows
Vous devez bien entendu disposer de MinGW pour Windows. Si ce n'est pas déjà le cas, il faudra l'installer.
Téléchargez la dernière version en date de Automated MinGW Installer et installez la.
Durant le processus d'installation, choisissez de télécharger et d'installer la version courante et au moment de choisir les composants de l'installation, sélectionnez compilateur g++ et MinGW Make. Enfin, choisissez C:\MinGW comme répertoire de destination.
Une fois l'installation terminée, ajoutez C:\MinGW\bin à la variable d'environnement PATH.
Installation d'OpenSSL
Téléchargez la dernière version stable d'OpenSSL. La dernière version stable en date lors de l'écriture de ce tutoriel était la version 0.9.8l. Extrayez OpenSSL dans C:\tmp\openssl-0.9.8l. Faites attention aux sous-répertoires...
Pour compiler OpenSSL, il est nécessaire d'installer Perl. On utilisera pour cela ActivePerl, qui est très simple à installer. Téléchargez la dernière version d'ActivePerl et installez la. Conservez tous les paramètres par défaut, et cochez la case ajouter au PATH.
Une fois l'installation terminée, ouvrez une console, et faites un echo %PATH% pour vérifier que MinGW et Perl sont bien inclus dans le PATH.
Il est alors temps de compiler et d'installer OpenSSL. Vous n'avez qu'à suivre les étapes suivantes. Les lignes commençant par REM sont simplement des commentaires.
REM on se positionne dans le dossier désarchivé. cd c:\tmp\openssl-0.9.8l REM on lance de la compilation. call ms\mingw32.bat REM on lance les tests pour vérifier que tout est ok. cd out call ..\ms\test.bat REM on installe les bibliothèques dans C:\openssl cd .. mkdir c:\openssl mkdir c:\openssl\mingw32 mkdir c:\openssl\mingw32\bin mkdir c:\openssl\mingw32\lib mkdir c:\openssl\mingw32\include mkdir c:\openssl\mingw32\include\openssl copy outinc\openssl\* c:\openssl\mingw32\include\openssl copy /b libeay32.dll c:\openssl\mingw32\bin copy /b libssl32.dll c:\openssl\mingw32\bin copy /b out\openssl.exe c:\openssl\mingw32\bin copy /b out\libcrypto.a c:\openssl\mingw32\lib copy /b out\libssl.a c:\openssl\mingw32\lib copy /b out\libeay32.a c:\openssl\mingw32\lib copy /b out\libssl32.a c:\openssl\mingw32\lib
Tout est maintenant installé dans C:\openssl.
Utilisation d'OpenSSL
libcrypto.a et libssl.a sont les bibliothèques statiques, elles nécessitent l'utilisation de la bibliothèque Windows gdi32.
libeay32.a et libssl32.a sont les bibliothèques dynamiques, l'exécutable créé aura besoin des DLL libeay32.dll et libeay32.dll.
Ainsi pour compiler en dynamique, on ajoutera à la commande gcc les options suivantes :
-IC:/openssl/mingw32/include -LC:/openssl/mingw32/lib -lssl32 -leay32
Et pour compiler en statique, on utilisera les options suivantes :
-IC:/openssl/mingw32/include -LC:/openssl/mingw32/lib -lssl -lcrypto -lgdi32
Pour tester, nous utiliserons un des exemples fournis avec OpenSSL. Cet exemple a été légèrement modifié pour compiler sous Windows.
Deux versions sont disponibles, une première en statique, et une seconde en dynamique. Pour compiler, il suffira de se placer dans les répertoires décompressés et de lancer la commande mingw32-make. L'archive est disponible en fin de tutoriel.
Conclusion
Vous voilà normalement paré pour développer de superbes applications libres utilisant OpenSSL. N'hésitez pas à poster des commentaires si vous avez des astuces ou si vous avez des problèmes de compilation.

Commentaires
Bonjour.
Cela ne fonctionne pas car les appels d'autres batchs par tes commandes ne te permet pas de continuer d'exécuter ton propre batch, celui-ci s'arrête après l'appel de la compilation, pour y remédier remplacer :
par
et
par
Merci pour ce tuto très pratique.
Bonjour. En fait, ces commandes sont juste à taper dans une console. Mais si on les met dans un batch, elles ne fonctionnent plus. Je corrige donc en ajoutant le call pour que cela soit fonctionnel dans les deux cas. Merci