[CMake] CMake with VS2015 C++ Build Tools and missing ucrtbased.dll

Roger Leigh rleigh at codelibre.net
Sun Jul 10 07:35:23 EDT 2016


I'm doing some initial testing of CMake 3.6.0 with the newly-released 
Visual Studio 2015 Update 3 C++ Build Tools 
(http://landinghub.visualstudio.com/visual-cpp-build-tools).  I.e. the 
standalone compiler without the IDE.

I'm configuring with:

   cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug|Release [in an x64 native 
tools command prompt]
   cmake -G "Visual Studio 14 2015 Win64"

And then building and running the unit tests with ctest.

With a release build using either generator, all the tests run and pass. 
  With a debug build using either generator, every test fails with the 
message:

<TestName.exe> - System Error
The program can't start because ucrtbased.dll is missing from your 
computer.  Try reinstalling the program to fix this problem.

The DLL *is* installed on the system:
/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows 
Kits/10/ExtensionSDKs/Microsoft.UniversalCRT.Debug/10.0.10240.0/Redist/Debug/arm/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows 
Kits/10/ExtensionSDKs/Microsoft.UniversalCRT.Debug/10.0.10240.0/Redist/Debug/arm64/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows 
Kits/10/ExtensionSDKs/Microsoft.UniversalCRT.Debug/10.0.10240.0/Redist/Debug/x64/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows 
Kits/10/ExtensionSDKs/Microsoft.UniversalCRT.Debug/10.0.10240.0/Redist/Debug/x86/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/arm/ucrt/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/arm64/ucrt/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/x64/ucrt/ucrtbased.dll
/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/x86/ucrt/ucrtbased.dll

And the environment:
INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\INCLUDE;C:\Program Files (x86)\Windows 
Kits\10\include\10.0.10240.0\ucrt;C:\Program Files (x86)\Windows 
Kits\8.1\include\shared;C:\Program Files (x86)\Windows 
Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\winrt;
LIB=C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\LIB\amd64;C:\Program Files (x86)\Windows 
Kits\10\lib\10.0.10240.0\ucrt\x64;C:\Program Files (x86)\Windows 
Kits\8.1\lib\winv6.3\um\x64;
LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\LIB\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Windows\Microsoft.NET\Framework64\;References\CommonConfiguration\Neutral;\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral;
Path=c:\opt\bin;C:\Program Files (x86)\MSBuild\14.0\bin\amd64;C:\Program 
Files (x86)\Microsoft Visual Studio 
14.0\VC\BIN\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Windows\Microsoft.NET\Framework64\;C:\Program 
Files (x86)\Windows Kits\8.1\bin\x64;C:\Program Files (x86)\Windows 
Kits\8.1\bin\x86;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program 
Files (x86)\PuTTY\;C:\Program Files (x86)\Windows Kits\8.1\Windows 
Performance Toolkit\;C:\Program 
Files\CMake\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Users\rleigh\AppData\Local\Programs\Git\cmd

But for some reason it's not on the PATH while the release version of 
the ucrtbase.dll is.  I'm not sure if this is a bug in the VS command 
prompt environment--"Windows Kits/8.1/bin/x64" is on the path, but not 
"Windows Kits/10/bin/x64", while both are in the include path...  Could 
this be a bug in the VS command prompt environment?  Or is this more 
likely to be a cmake issue?

The code in question is https://github.com/rleigh-dundee/xercesc-cmake 
(I'm working on a conversion of the autotools and VS project files to a 
cmake build), but I suspect this would happen with any project which 
wants to run a debug executable.


Thanks,
Roger


More information about the CMake mailing list