Hi.
I want to build a simple "int main(){ return 0; }" program that passes the API Validator OneCore compatibility test.
After reading https://msdn.microsoft.com/en-us/windows/hardware/drivers/develop/getting-started-with-universal-drivers and https://msdn.microsoft.com/en-us/library/windows/desktop/mt654040(v=vs.85).aspx I proceeded to build a simple default solution in VS2015 u3 on my Windows 10 build 14393 system with the program described above.
If my platform toolset is "WindowsApplicationForDrivers10.0" or even "Visual Studio 2015 (v140)", running the API Validator that comes with the Windows SDK as a post-build event succeeds:
"C:\Program Files (x86)\Windows Kits\10\bin\x64\apivalidator.exe" -driverpackagepath:"$(OutDir)\" -SupportedApiXmlFiles:"C:\Program Files (x86)\Windows Kits\10\build\universalDDIs\$(Platform)\UniversalDDIs.xml" -ModuleWhiteListXmlFiles:"C:\Program Files (x86)\Windows Kits\10\build\universalDDIs\$(Platform)\ModuleWhiteList.xml"
If I switch the Platform Toolset to Intel C++ Compiler 17.0 u2, I get warnings that my executable now has a dynamic dependency on ntdll.dll, which is not OneCore compliant. According to my investigations, this is because libirc.lib was linked with a dependency on ntlib.lib and the warnings appear for printf, vsnprintf, scanf, and variations of those functions.
Is it possible to generate a libirc.lib such that it ignores these default dependencies? This would allow the person building the executable or dll to choose the OneCore umbrella library (OneCore.lib) or the traditional desktop library (ntdll.lib) as the means to resolve those dependencies instead of having that decision being made in the libirc.lib.
Thank you.