使用vcpkg构建v141工具集grpc C++静态库时re2构建失败
问题:使用vcpkg基于v141工具集构建gRPC静态库时re2编译失败
错误日志
Installing 8/11 re2:x64-windows@2023-07-01... Building re2:x64-windows@2023-07-01... -- Downloading https://github.com/google/re2/archive/2023-07-01.tar.gz -> google-re2-2023-07-01.tar.gz... -- Extracting source C:/Source/Repos/vcpkg/downloads/google-re2-2023-07-01.tar.gz -- Using source at C:/Source/Repos/vcpkg/buildtrees/re2/src/2023-07-01-5f6ab6c906.clean -- Configuring x64-windows CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:127 (message): Command failed: C:/Source/Repos/vcpkg/downloads/tools/ninja/1.10.2-windows/ninja.exe -v Working Directory: C:/Source/Repos/vcpkg/buildtrees/re2/x64-windows-rel/vcpkg-parallel-configure Error code: 1 See logs for more information: C:\Source\Repos\vcpkg\buildtrees\re2\config-x64-windows-dbg-CMakeCache.txt.log C:\Source\Repos\vcpkg\buildtrees\re2\config-x64-windows-rel-CMakeCache.txt.log C:\Source\Repos\vcpkg\buildtrees\re2\config-x64-windows-out.log Call Stack (most recent call first): installed/x64-windows/share/vcpkg-cmake/vcpkg_cmake_configure.cmake:252 (vcpkg_execute_required_process) ports/re2/portfile.cmake:9 (vcpkg_cmake_configure) scripts/ports.cmake:192 (include) error: building re2:x64-windows failed with: BUILD_FAILED See https://learn.microsoft.com/vcpkg/troubleshoot/build-failures?WT.mc_id=vcpkg_inproduct_cli for more information. Elapsed time to handle re2:x64-windows: 2.8 s Please ensure you're using the latest port files with `git pull` and `vcpkg update`. Then check for known issues at: https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+re2 You can submit a new issue at: https://github.com/microsoft/vcpkg/issues/new?title=[re2]+Build+error+on+x64-windows&body=Copy+issue+body+from+C%3A%2FSource%2FRepos%2Fvcpkg%2Finstalled%2Fvcpkg%2Fissue_body.md
已尝试的操作
- 针对abseil、grpc、openssl、protobuf、re2、upb、zlib、vcpkg-cmake、vcpkg-cmake-get-vars及vcpkg-cmake-config端口执行
git checkout 8184c5e -- ports/<port>,该提交为适配v141工具集的最新版本; - 修改triplet配置(本机同时安装VS2017和VS2022):
set(VCPKG_PLATFORM_TOOLSET v141) set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic)
- 删除vcpkg的installed、packages、downloads文件夹后执行
.\vcpkg install grpc:x64-windows。
疑问及解决方案
一、MAKECOMMAND引用v143 cmake的排查点
- 检查环境变量:确认系统PATH中是否优先包含VS2022的CMake路径,导致vcpkg调用了高版本CMake。临时调整PATH,将VS2017对应的CMake路径(通常在
C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin)移到VS2022路径之前。 - 指定vcpkg使用的CMake版本:在vcpkg的triplet文件中添加
set(VCPKG_CMAKE_EXECUTABLE "C:/path/to/vs2017/cmake.exe"),强制指定VS2017配套的CMake版本。 - 检查VS环境变量加载:执行vcpkg前,运行
C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\Common7\Tools\VsDevCmd.bat加载VS2017开发环境,避免误加载VS2022的环境。
二、Ninja版本选择
当前vcpkg自带的1.10.2版本完全兼容v141工具集,无需刻意更换。若怀疑Ninja问题,可尝试更新到v1.11及以上版本,但核心问题还是CMake与工具集的匹配。
三、修改re2的CMakeLists.txt适配VS2017(v141)
找到re2源码目录下的CMakeLists.txt(路径为C:/Source/Repos/vcpkg/buildtrees/re2/src/2023-07-01-5f6ab6c906.clean/CMakeLists.txt),做以下修改:
- 调整最低VS版本要求:
- 把
cmake_minimum_required(VERSION 3.16)改为cmake_minimum_required(VERSION 3.14)(VS2017配套CMake最低版本为3.14); - 找到检查MSVC版本的代码,比如:
将if(MSVC) if(MSVC_VERSION LESS 1920) # VS2019对应MSVC_VERSION=1920 message(FATAL_ERROR "RE2 requires Visual Studio 2019 or later.") endif() endif()1920改为1910(VS2017对应MSVC_VERSION=1910),或直接注释这段版本检查代码。
- 把
- 修复C++标准兼容:若后续编译出现C标准相关错误,在CMakeLists.txt中添加
set(CMAKE_CXX_STANDARD 14)(VS2017对C17支持不完善,re2 2023-07-01版本可降级到C++14编译)。
修改后重新执行vcpkg install命令即可。
内容的提问来源于stack exchange,提问作者alex555
相关产品推荐
相关产品推荐

