The recently released preview of MSVC14 has changed the ABI for the C Runtime 
library. The intent is to avoid having to change it again in the future, so 
that DLLs linked against the current version will be able to safely use later 
versions.



In e_os.h there is the following code which does not work correctly with 
MSVC14, because the signature and semantics of __iob_func have changed.



#    if defined(_MSC_VER) && !defined(_DLL) && defined(stdin)
#      if _MSC_VER>=1300
#        undef stdin
#        undef stdout
#        undef stderr
         FILE *__iob_func();
#        define stdin  (&__iob_func()[0])
#        define stdout (&__iob_func()[1])
#        define stderr (&__iob_func()[2])



I have built successfully with the condition changed to:

#      if _MSC_VER>=1300 && _MSC_VER<1900



However, since I don't fully understand why it is necessary to redefine these 
variables, I can't be sure that this is the correct fix. I have successfully 
built, but have not run thorough tests (let me know if there's an appropriate 
command I could use to verify my build).



As of the current preview, the following change also builds. The defines are 
identical to the default definitions though, so it should be identical to the 
condition above with the upper limit.



#    if defined(_MSC_VER) && !defined(_DLL) && defined(stdin)
#      if _MSC_VER>=1900
#        undef stdin
#        undef stdout
#        undef stderr
         FILE *__iob_func(unsigned);
#        define stdin  (__iob_func(0))
#        define stdout (__iob_func(1))
#        define stderr (__iob_func(2))
#      elif _MSC_VER>=1300



I will be continuing to build OpenSSL frequently with MSVC14 as it is being 
developed, so I will be able to provide further updates if things change. I 
understand if you don't want to make code changes to accommodate a pre-release 
compiler.



Thanks,

Steve



______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [email protected]

Reply via email to