Vcpkg安装库是报zlib安装失败的解决办法
现象:
使用vcpkg安装需要依赖zlib的库时,会先安装zlib,此时会报错:
Error: Building package zlib:x86-windows-static failed with: BUILD_FAILED
输出日志中有大量cmake相关错误。
原因:
安装vs2017时过度洁癖,自以为不需要的到东西都没有装。
这里用cmake生成ninja的make文件,而ninja再去调用对应平台(x86/x64)的cl.exe
来编译cpp文件。
而不是通常在win下编译使用的命令行工具:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
虽然我们能在rules.ninja
中定义的位置找到相关的cl.exe。但是当前这个cl
实际是无法直接用的。
比如:
C:\PROGRA~2\MIB055~1\2017\ENTERP~1\VC\Tools\MSVC\1411~1.255\bin\HostX64\x86\cl.exe
我们直接执行一个cpp的编译:
C:\PROGRA~2\MIB055~1\2017\ENTERP~1\VC\Tools\MSVC\1411~1.255\bin\HostX86\x86\cl.exe -DNO_FSEEKO -DZLIB_DLL -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE -ID:\Vcpkg\vcpkg\buildtrees\zlib\src\zlib-1.2.11 -I. /DWIN32 /D_WINDOWS /W3 /utf-8 /MP /D_DEBUG /MDd /Z7 /Ob0 /Od /RTC1 /showIncludes /FoCMakeFiles\zlib.dir\adler32.obj /FdCMakeFiles\zlib.dir\ /FS -c D:\Vcpkg\vcpkg\buildtrees\zlib\src\zlib-1.2.11\adler32.c
此时会直接报错找不到mspdb140.dll。而使用everything搜索整个电脑,这东西从来没有过。
所以结论就是,我们精简安装(仅安装了windows平台c++开发相关工具)的vs2017的编译器是不完整的,至少对于cmake-->ninja-->cl.exe
这种情况是无法使用的。
所以我们要做的需要让其支持上述工具链的编译。
元芳!怎么办?
答案很简单:
- 1、开始菜打开“Visual Studio Installer“`
- 2、点击
“修改”
- 3、在
“单个组件”
中找到“用于CMake和Linux的VisualC++工具”
勾选之 - 4、修改安装,静候佳音。
此时再用everything搜搜mspdb140.dll
系统中已经有这东西了。
再试试vcpkg install zlib
你会看到
The package zlib is compatible with built-in CMake targets
大功告成。
BTW
CMake我现在的当前最新版(3.10.0_x64)
附上我的vs2017安装的组件。