You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions Windows 2019环境bcrypt缺失致编译失败求助

编译GameNetworkingSockets时Windows环境下BCrypt相关问题的解决思路

问题背景与现象

  • 需求:在Windows平台编译GameNetworkingSockets,使用系统自带的BCrypt替代OpenSSL,避免额外安装依赖。
  • 环境差异:GitHub Actions中Windows 2022编译正常,但Windows 2019提示BCrypt缺失,CMake报错如下:

-- Looking for BCryptEncrypt
-- Looking for BCryptEncrypt - not found
CMake Error at externals/gamenetworkingsockets/GameNetworkingSockets/CMakeLists.txt:95 (message):
You're on Windows but BCrypt seems to be unavailable, you will need OpenSSL

  • 修改CMake检测代码后的新问题:
    • Windows 2019下所有BCrypt检测逻辑依然不生效;
    • Windows 2022中,若先引入bcrypt.h会触发语法错误:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\bcrypt.h(39,31): error C2143: syntax error: missing ')' before 'return' [F:\personal\cage-examples\externals\cage\build\CMakeFiles\CMakeTmp\cmTC_61959.vcxproj]

解决思路

1. 修正CMake检测时的库链接逻辑

Windows 2019自带BCrypt库,但原检测代码可能未显式链接bcrypt.lib导致符号查找失败。修改CMakeLists.txt中的检测逻辑:

  • 在执行CHECK_FUNCTION_EXISTS(BCryptEncrypt HAVE_BCRYPTENCRYPT)之前,添加set(CMAKE_REQUIRED_LIBRARIES bcrypt.lib),确保检测时链接系统库。
  • 若使用find_package,可指定查找BCrypt组件并强制链接。

2. 调整头文件包含顺序

Windows SDK的bcrypt.h依赖windows.h中的宏定义,必须先包含windows.h再引入bcrypt.h。修改CMake检测用的测试代码:

#include <windows.h>
#include <bcrypt.h>

避免因宏缺失导致的语法错误。

3. 显式指定Windows SDK版本

Windows 2019环境可能默认使用较旧的SDK版本,显式指定兼容的Windows 10 SDK版本(如10.0.19041.0):

  • 在CMake命令中添加参数:-DCMAKE_SYSTEM_VERSION=10.0.19041.0;
  • 在GitHub Actions的Windows 2019任务中,通过相关工具指定SDK版本。

4. 验证系统库的可访问性

Windows 2019系统自带bcrypt.dll(路径C:\Windows\System32\bcrypt.dll),若CMake仍无法检测,可:

  • 检查GitHub Actions的Windows 2019环境是否为完整系统镜像,而非裁剪版容器;
  • 手动指定库路径,或在CMake中显式添加link_directories指向系统库目录。

内容的提问来源于stack exchange,提问作者Tomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:47:19