Hi, > 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).
The original reason for redefining these macros was to produce object code that can be used both to link statically into application and as part of a shared library. It's ever-lasting /MT vs. /MD "feud". The issue is discussed in RT#1230. Since the ticket in question the build procedure was amended to /MT /Zl, so that you don't have to specify /NODEFAULTLIB. As for what to do. As far as I recall the "tangible" reason for redefine was that [by 1300 time] definition depended on compiler command line options (or wasn't a call to function). If definition does not depend on command line *now*, *and* always resort to function call, then it would be appropriate to to add "&& _MSC_VER<1900", or in fact whichever version when it became invariant. I don't have possibility to check MSVC14 for time being, but it seems to be case already in MSC10 or _MSC_VER==1600. Could you double-check MSCV14, while I do some testing with earlier version? ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List [email protected] Automated List Manager [email protected]
