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]