I've just confirmed the new DLL works under WINE.
I think these linker errors will be worth looking into. It would be good if we had more knowledge on how things works, what exactly the compiler options do, what error messages mean, and how to go about debugging problems. This is the kind of thing that seems to come up when upgrading to newer versions of Visual Studio, so it would be good to have a nice article written on this.
Here's some info that might be useful:
Linker Tools Warning LNK4098 (https://msdn.microsoft.com/en-us/library/aa267384(v=vs.60).aspx):
This contains some of the info you mentioned. In particular for a non-debug single-threaded compile it mentions using options:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
Note that the link appears to be for VS 6.0, which is quite old now. (~20 years)
An interesting point on that page was:
You can use the linker’s /VERBOSE:LIB switch to determine which libraries the linker is searching.
That might really help with understanding and debugging the problem.
It might also be nice to get some details on the comment:
The run-time libraries now contain directives to prevent mixing different types.
/NODEFAULTLIB (https://msdn.microsoft.com/en-us/library/3tz4da4a.aspx):
Documentation for VS 2015 that explains what exactly the option does. Specifying the option without a library name should remove all defaults. I believe the Visual Studio 6 version of the SDK removed all default libraries, and then added in a custom C Runtime library, so this might be a good starting point. Level code is quite restricted, so there shouldn't be many dependencies by default. Another option might be to somehow specify a library compatible with older versions of Visual Studio.
CRT Library Features (https://msdn.microsoft.com/en-us/library/abx4dbyh.aspx):
Some more info about the C-Runtime library. Dependence on the CRT, and it's different versions, seems to be where all this trouble stems from.