Ubuntu环境安装gnatcheck后执行报错的排查求助
问题背景
在Ubuntu 20.04 Docker容器中执行以下命令构建Ada开发环境:
add-apt-repository ppa:ubuntu-toolchain-r/test apt-get update apt-get install -y gnat asis-programs
出现以下现象:
gnatmake hello.adb可正常执行- 运行
gnatcheck时报错:
gnatcheck: initialization failed gnatcheck: raised CONSTRAINT_ERROR : asis_ul-projects.adb:1798 access check failed
- 运行
gnat check时提示:
could not locate x86_64-linux-gnu-gnatcheck-9
疑问:是Ubuntu 20.04与gnatcheck不兼容,还是安装存在问题?已知2019/2020年社区变更可能相关。目标环境为RHEL9,倾向FSF开源方案,若需购买GNAT SAS也可告知。
问题原因分析
PPA包版本匹配问题
Ubuntu 20.04的ubuntu-toolchain-r/testPPA提供的GNAT与ASIS包存在版本错位:asis-programs依赖的ASIS库和系统安装的GNAT版本不兼容,触发运行时CONSTRAINT_ERROR访问检查失败。gnat check找不到对应版本的可执行文件,说明PPA未正确提供版本化的gnatcheck-9,或安装路径未被系统识别。
社区变更的影响
FSF GNAT在2019年后调整了工具链结构,将gnatcheck等静态分析工具从核心包拆分,同时更新了ASIS库API。Ubuntu 20.04的PPA包未同步这些变更,导致组件间兼容性断裂。
解决方案(按优先级排序)
方案1:使用FSF官方GNAT工具链(推荐,符合开源倾向)
直接获取适配RHEL9的FSF GNAT二进制包,步骤如下:
- 下载与RHEL9兼容的GNAT版本(如GNAT 12或13)
- 解压后配置环境变量:
export PATH=/path/to/gnat/bin:$PATH export LD_LIBRARY_PATH=/path/to/gnat/lib:$LD_LIBRARY_PATH - 验证安装:
gnat --version gnatcheck --version
该方案确保GNAT核心工具、ASIS库、gnatcheck版本完全匹配,从根源避免兼容性问题。
方案2:修复Ubuntu 20.04中的PPA安装
若需临时在Ubuntu 20.04中使用,可尝试:
- 安装版本一致的GNAT和ASIS包:
apt-get install -y gnat-9 asis-programs-9 - 使用版本化命令执行:
gnatcheck-9 hello.adb
此为临时 workaround,仍可能存在潜在兼容性隐患。
方案3:GNAT SAS(商业方案)
若需企业级稳定性和技术支持,可购买AdaCore的GNAT SAS:
- 适配RHEL9的GNAT SAS包含经过严格测试的gnatcheck、ASIS库及全套Ada工具链
- 提供官方技术支持,适合生产环境部署
内容的提问来源于stack exchange,提问作者DaveParillo
相关产品推荐
相关产品推荐

