Ubuntu22.04 gcc11.2环境安装gdal-3.4.3报CMake SUBSTRING参数错误
问题根因
报错并非string(SUBSTRING ${GDAL_GIT_HASH} 0 10 REV)本身语法错误,是执行到该行时${GDAL_GIT_HASH}变量为空,变量展开后命令实际为string(SUBSTRING 0 10 REV),缺少待截取的字符串参数,因此触发参数数量不足的报错。
从编译日志可以看到,cmake调用阶段传入的-DGDAL_SHA1SUM=参数为空值,该问题几乎都出现在使用官网源码压缩包构建的场景:源码压缩包不携带.git目录元数据,cmake脚本调用git读取提交哈希时无法获取有效值,最终导致变量为空。
可行解决方案
任选以下一种方式处理即可:
- 手动传入哈希参数重新配置:执行cmake配置命令时追加参数
-DGDAL_SHA1SUM=0000000000000000000000000000000000000000(填入任意40位十六进制字符串即可,不影响GDAL实际功能,仅用于版本信息里的提交哈希记录),配置完成后重新执行make install。 - 修改cmake脚本兼容空值:打开
cmake/helpers/generate_gdal_version_h.cmake文件,在第27行的string(SUBSTRING...)代码前添加空值判断逻辑,给空哈希设置默认值,添加代码如下:
if(NOT GDAL_GIT_HASH) set(GDAL_GIT_HASH "0000000000000000000000000000000000000000") endif()
保存修改后重新执行编译安装即可绕过报错。
- 使用完整git仓库构建:删除现有源码,通过git拉取对应v3.4.3标签的完整GDAL源码仓库后重新构建,完整仓库携带.git元数据,构建脚本可自动读取正确的git提交哈希,不会触发空变量错误。
内容的提问来源于stack exchange,提问作者Pei JIA
相关产品推荐
相关产品推荐

