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

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也可告知。


问题原因分析

  1. PPA包版本匹配问题
    Ubuntu 20.04的ubuntu-toolchain-r/test PPA提供的GNAT与ASIS包存在版本错位:

    • asis-programs依赖的ASIS库和系统安装的GNAT版本不兼容,触发运行时CONSTRAINT_ERROR访问检查失败。
    • gnat check找不到对应版本的可执行文件,说明PPA未正确提供版本化的gnatcheck-9,或安装路径未被系统识别。
  2. 社区变更的影响
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:22:36