CMake编译时Hunter拉取Boost 1.66.0链接被禁用的问题咨询
问题根因
- Hunter 内置的旧版本Boost下载源指向已停止对外服务的bintray存储节点,请求该地址会返回403权限错误,实际写入本地的是0字节空文件,因此出现哈希校验不匹配的异常。报错日志里实际校验值
da39a3ee5e6b4b0d3255bfef95601890afd80709是标准空文件的SHA1哈希值,可直接确认下载流程未拿到有效文件。
可落地的规避方案
方案1:手动预置有效安装包到Hunter本地缓存
- 从可信渠道获取匹配要求的
boost_1_66_0.7z源码包,确认文件SHA1值和报错提示的期望值075d0b43980614054b1f1bafd189f863bba6600e完全一致 - 将文件直接放到日志提示的缓存路径:
/home/op/.hunter/_Base/Download/Boost/1.66.0/075d0b4/目录下 - 重新执行CMake配置流程,Hunter会自动跳过下载步骤,直接进入校验、解压、编译环节
注意:如果文件哈希和要求值不匹配,Hunter会自动删除文件重新触发下载流程
- 从可信渠道获取匹配要求的
方案2:替换Hunter的Boost下载源配置
找到当前Hunter版本中对应Boost 1.66.0的元配置文件,将原有的失效bintray下载链接替换为同版本源码的有效镜像路径,不需要改动原有文件的SHA1校验值。修改完成后重新触发CMake配置,Hunter会自动从新的源拉取符合要求的源码包。方案3:跳过Hunter的Boost管理,复用本地已安装的Boost
- 注释掉原有配置中的
hunter_config(Boost VERSION 1.66.0)行 - 在CMake配置中添加
set(Boost_NO_BOOST_CMAKE ON)、set(Boost_USE_STATIC_LIBS OFF)等参数,指定本地已安装的1.66.0版本Boost的安装路径 - 重新执行CMake配置,流程将直接使用本地Boost,不会触发Hunter的自动下载逻辑
注意:要保证本地Boost的版本号、编译参数和项目要求完全匹配,避免出现ABI兼容问题
- 注释掉原有配置中的
方案4:升级Hunter版本
较新版本的Hunter已经将所有旧版本Boost的下载源从失效的bintray节点切换到长期稳定的可用源,升级Hunter后不需要手动修改配置,即可正常拉取对应版本的Boost源码。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

