使用vcpkg安装Live555遇std::atomic_flag::test报错,求C++20编译方案
解决Windows下vcpkg编译Live555时的C++20特性错误
问题根源
std::atomic_flag::test是C20新增成员,vcpkg默认编译Live555时未启用C20标准,导致MSVC v143无法识别该语法。修改VS项目属性无效是因为vcpkg编译依赖时使用独立的CMake构建流程,项目属性不会传递给vcpkg的编译环节。
解决方案
方法1:修改Live555的vcpkg Port配置
直接修改vcpkg中Live555的CMake配置,强制启用C++20:
- 找到vcpkg的ports目录,路径通常为
vcpkg\ports\live555 - 打开该目录下的
CMakeLists.txt,在project(LIVE555)语句后添加以下代码:set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) - 重新执行安装命令,清理旧构建缓存:
vcpkg install live555:x64-windows --clean-after-build
方法2:使用自定义Triplet指定C++20
通过自定义vcpkg triplet全局配置C++20标准,避免修改单个port:
- 复制vcpkg triplets目录下的
x64-windows.cmake,重命名为x64-windows-cpp20.cmake(路径:vcpkg\triplets) - 在新文件末尾添加以下配置:
set(VCPKG_CXX_FLAGS "${VCPKG_CXX_FLAGS} /std:c++20") set(VCPKG_CMAKE_CONFIGURE_OPTIONS "${VCPKG_CMAKE_CONFIGURE_OPTIONS} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON") - 使用自定义triplet安装Live555:
vcpkg install live555:x64-windows-cpp20
额外说明:官方编译的ifaddrs.h问题
Windows系统原生不提供ifaddrs.h,官方Live555编译脚本未适配Windows平台,因此使用vcpkg是更可靠的方式——vcpkg的Live555 port已包含Windows平台的兼容性补丁,只需解决C++20标准配置问题即可。
内容的提问来源于stack exchange,提问作者stupidbutseeking
相关产品推荐
相关产品推荐

