Comment puis-je construire OpenSSL lié statiquement contre l'exécution de Windows?

Je suis en train de travailler sur une application C++ pour Windows qui utilise OpenSSL 1.0.1 e de la bibliothèque. Je suis sur Visual Studio 2008.

Pour des raisons de portabilité de mon application est lié statiquement à l'encontre des bibliothèques d'exécution (/MT et /MTd options). Et je ne livrons pas le runtime libs avec mon application.

Par la OpenSSL FAQ, la bibliothèque est par défaut lié à l'encontre multithread DLL runtime (/MDd) ce qui est évidemment incompatible avec mon scénario. Donc, pour faire mon programme de travail, j'ai ajouté applink.c à mon projet. Sur ma machine de dev et sur la plupart des ordinateurs de test le programme fonctionne très bien.

Mais malheureusement, j'ai situé les ordinateurs où l'application ne démarre pas. Windows affiche l'erreur:

The application failed to initialize properly (0xc0150002). Click on OK to
terminate the application. 

J'ai ouvert libeay32.dll dans Dependency Walker et je vois que MSVCR90.dll n'est pas trouvé. Donc, l'astuce avec applink.c ne fonctionne pas vraiment pour moi.

Comment puis-je construire OpenSSL avec /MT ou /MTd option?

"Mais malheureusement, j'ai situé les ordinateurs où l'application ne démarre pas... je vois que MSVCR90.dll n'est pas trouvé" - assurez-vous que le problème des ordinateurs ont la bonne version du runtime MSVC. Vous pouvez les télécharger depuis le site de Microsoft. Ils devraient être inclus dans votre programme d'installation du package.

OriginalL'auteur user2724991 | 2013-08-28