From b051914032aeb8112d22159d4009304f96a76ad8 Mon Sep 17 00:00:00 2001 From: ZuBsPaCe Date: Thu, 29 Oct 2015 14:31:48 +0100 Subject: [PATCH] Fixes Visual Studio 2015 linker error (___iob_func) The original, uncommited fix simply changed compiler flag /MT to /MD. This would link the C runtime dynamically instead of statically. This is bad, because some users would have to install the c runtime before starting the editor. You can find alot of info about this error, which can happen after upgrading to VS 2015, and there are workarounds. But I realized, that the only place, where iob_func is used, is in e_os.h of the openssl library. The latest version already contains a workaround. I simply updated the part in e_os.h. Reference: https://github.com/openssl/openssl/blob/master/e_os.h#L268 Reference: https://software.intel.com/en-us/forums/intel-parallel-studio-beta-archived/topic/266345 Reference: https://connect.microsoft.com/VisualStudio/feedback/details/1144980/error-lnk2001-unresolved-external-symbol-imp-iob-func Reference: http://stackoverflow.com/questions/757418/should-i-compile-with-md-or-mt Here's the original error message: Creating library bin\godot.windows.tools.lib and object bin\godot.windows.tools.exp drivers1.windows.tools.lib(t1_enc.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(txt_db.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(d1_enc.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(ui_openssl.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(cryptlib.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(pem_lib.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(d1_both.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func drivers1.windows.tools.lib(rsa_sign.windows.tools.obj) : error LNK2001: unresolved external symbol ___iob_func bin\godot.windows.tools.exe : fatal error LNK1120: 1 unresolved externals scons: *** [bin\godot.windows.tools.exe] Error 1120 --- drivers/builtin_openssl2/e_os.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/builtin_openssl2/e_os.h b/drivers/builtin_openssl2/e_os.h index e801b4106a9..7323a7b4bf3 100644 --- a/drivers/builtin_openssl2/e_os.h +++ b/drivers/builtin_openssl2/e_os.h @@ -318,8 +318,8 @@ static unsigned int _strlen31(const char *str) # undef isupper # undef isxdigit # endif -# if defined(_MSC_VER) && !defined(_DLL) && defined(stdin) -# if _MSC_VER>=1300 +# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) +# if _MSC_VER>=1300 && _MSC_VER<1600 # undef stdin # undef stdout # undef stderr @@ -327,7 +327,7 @@ static unsigned int _strlen31(const char *str) # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2]) -# elif defined(I_CAN_LIVE_WITH_LNK4049) +# elif _MSC_VER<1300 && defined(I_CAN_LIVE_WITH_LNK4049) # undef stdin # undef stdout # undef stderr