mincore.lib symbols in the link - how to avoid?

I’m trying to compile a program that is intended to use Clang as a library, and getting an error where it tries to link in some symbols that are not actually available.

Windows 7
Visual Studio 2017
LLVM 4.0.1
Everything 64-bit, and I built LLVM myself

// minimal test program

#include <clang/Frontend/CompilerInstance.h>

int main(int argc, char **argv) {

clang::CompilerInstance ci;
return 0;
}

cl /I\llvm\build\include /I\llvm\build\tools\clang\include /I\llvm\include /I\llvm\tools\clang\include /J /MTd /Zi test.cpp \llvm\build\Debug\lib*.lib

clangDriver.lib(MSVCToolChain.obj) : error LNK2019: unresolved external symbol GetFileVersionInfoSizeW referenced in function "private: class clang::VersionTuple __cdecl clang::driver::toolchains::MSVCToolChain::getMSVCVersionFromExe(void)const " (?getMSVCVersionFromExe@MSVCToolChain@toolchains@driver@clang@@AEBA?AVVersionTuple@4@XZ)
clangDriver.lib(MSVCToolChain.obj) : error LNK2019: unresolved external symbol GetFileVersionInfoW referenced in function "private: class clang::VersionTuple __cdecl clang::driver::toolchains::MSVCToolChain::getMSVCVersionFromExe(void)const " (?getMSVCVersionFromExe@MSVCToolChain@toolchains@driver@clang@@AEBA?AVVersionTuple@4@XZ)
clangDriver.lib(MSVCToolChain.obj) : error LNK2019: unresolved external symbol VerQueryValueW referenced in function "private: class clang::VersionTuple __cdecl clang::driver::toolchains::MSVCToolChain::getMSVCVersionFromExe(void)const " (?getMSVCVersionFromExe@MSVCToolChain@toolchains@driver@clang@@AEBA?AVVersionTuple@4@XZ)

These symbols are nominally available in mincore.lib, but not really; adding that to the link, produces an executable that won’t run without an obscure DLL that is not present on many Windows machines, so it’s necessary to avoid bringing them in, in the first place.

clang.exe itself runs fine, which is presumably an existence proof that this is possible.

Same problem arises with release build, and with a minimal library set instead of *.lib.

What is the recommended way to solve this problem?

Link with version.lib instead?

  • Kim

Here's someone else who ran into the same problem:
https://github.com/poizan42/soswow64/commit/2f9e368c28476caff1ce2966f87e9122c422c804

This is a really shitty move by Micros~1, documenting mincore.lib as
the supplier of GetFileVersionInfo* functions, as if Windows 2000, XP,
Vista, 7 never existed, even though

admits that the minimum supported OS is Windows 2000.

That works, thanks!