web-dev-qa-db-fra.com

symbole externe non résolu __imp____iob_func référencé dans la fonction _OpenSSLDie

Je reçois une erreur ci-dessous lors de la migration de mon projet de VS2008 à VS2015.

21>TFCLd.lib(cryptlib.obj) : warning LNK4217: locally defined symbol _fprintf imported in function _OpenSSLDie
21>TFCLd.lib(rsa_sign.obj) : warning LNK4049: locally defined symbol _fprintf imported
21>TFCLd.lib(cryptlib.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _OpenSSLDie
21>TFCLd.lib(rsa_sign.obj) : error LNK2001: unresolved external symbol __imp____iob_func

Le projet repose sur VS2008 mais avec l'erreur ci-dessus dans VS2015. Puis-je savoir ce qui me manque?.

16
user3665224

Placez ceci au début de votre fichier d’en-tête de classe ou dans stdafx.h

FILE _iob[] = { *stdin, *stdout, *stderr }; 
extern "C" FILE * __cdecl __iob_func(void) { return _iob; }
20
Fred

Jettes un coup d'oeil à:
http://openssl.6102.n7.nabble.com/Compiling-OpenSSl-Project-with-Visual-Studio-2015-td59416.html

Modification de la ligne 310 du fichier e_os.h dans le répertoire racine openssl à partir de
# if _MSC_VER> =1300
à 
# if _MSC_VER> =1300 && _MSC_VER <= 1800
résout le problème.

L’affiche originale décrit la cause du problème:

Dans Visual Studio 2015, les bibliothèques avec les anciens noms ont été repensées.

Visual Studio 2015 est appelé _MSC_VER == 1900.

5
pitseeker

Assurez-vous que votre libcurl.lib a été compilé avec le même IDE (MSVC 2015) que votre application.

1
user999713

Votre version openSSL est obsolète pour VS2015. Téléchargez et installez la dernière version stable à partir de https://www.openssl.org/source/

Edit: Comment l'installer: https://www.youtube.com/watch?v=icNn-eJif9k

0
Brackets

En règle générale, cliquez sur le projet dans l'explorateur de solutions, puis sélectionnez -> Propriétés -> C/C++ -> Génération de code -> Bibliothèque d'exécution. Faire les bibliothèques et les binaires toute la même option.

0
Swiss Frank