2015-05-26 6 views
11

Ich erhalte einen Fehler unterhalb der Fehlermeldung bei der Migration meines Projekts von VS2008 auf VS2015.nicht aufgelöstes externes Symbol __imp____iob_func, auf das in der Funktion _OpenSSLDie verwiesen wird

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 

Das Projekt wird in VS2008 erstellt, aber mit dem obigen Fehler in VS2015. Darf ich wissen, was ich vermisse?

+2

Sie verknüpfen Code, der mit/MT kompiliert wurde, mit Code, der mit/MD kompiliert wurde. Normalerweise befindet sich dieser Code in einer Bibliothek. Dieser Fehler kann auch sehr unangenehme Laufzeitfehler verursachen. Es ist wichtig, dass der gesamte Code, der miteinander verknüpft ist, mit den gleichen Einstellungen kompiliert wird. Benutze nicht/MT. –

+0

Alle meine Codes werden mit/MD erstellt. Ich bekomme immer noch den Fehler. A – user3665224

Antwort

12

dieses in die Ihrer Klassenheaderdatei beginnen oder in stdafx.h

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

Danke für den Hinweis, ich könnte mit einem alten binary-only-Bibliothek mit diesem Trick (und auch Verknüpfung mit 'legacy_stdio_definitions.lib') und es scheint gut zu funktionieren. –

+0

Dieser Trick löst den Link-Fehler, obwohl es die Warnung erzeugt LNK4217: lokal definiertes Symbol ___iob_func in Funktion importiert ... (beim Aufbau alter SDL mit VS2017) – AntonK

3

Werfen Sie einen Blick auf:
http://openssl.6102.n7.nabble.com/Compiling-OpenSSl-Project-with-Visual-Studio-2015-td59416.html

Linie Ändern 310 der Datei e_os.h im OpenSSL Stammverzeichnis von
# if _MSC_VER> =1300
zu
# if _MSC_VER> =1300 && _MSC_VER <= 1800
behebt das Problem.

Das ursprüngliche Plakat beschreibt die Ursache des Problems:

Im Visual Studio 2015 die Bibliotheken mit alten Namen wurden

neu gestaltet

Visual Studio 2015 wird als _MSC_VER == 1900.

1

Seien Sie sicher, dass Ihre libcurl.lib mit dem gleichen IDE (MSVC 2015) wie Ihre Anwendung kompiliert wurde.

Verwandte Themen