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

GCC源码编译libada问题:libgnat区别、libgnarl.lst获取及编译指南

问题1:libgnat与libgnarl二者有什么区别?
  • libgnat是GNAT实现的Ada核心运行库,包含Ada标准规范定义的基础通用能力:基础类型支持、字符串处理、通用容器、异常处理、基础I/O等不依赖多任务调度的功能,是所有Ada程序运行的必备依赖。
  • libgnarl全称为GNAT Ada Runtime Library for tasking,是Ada多任务特性的专属运行库,包含任务调度、同步原语(保护对象、入口、屏障等)、实时调度策略、中断处理等并发、实时相关功能实现。若Ada程序未使用多任务特性,理论上可不用链接libgnarl,但标准GNAT发行版默认会同时提供两个库。
问题2:可以从哪里获取libgnarl.lst文件?

libgnarl.lst是编译Ada运行库阶段自动生成的中间文件,不属于GCC源码包自带的静态文件,不需要额外下载获取。你遇到的缺失问题本质是首次全量编译GCC时没有完整执行Ada运行库的编译流程,可按以下步骤生成该文件:

  1. 回到GCC编译的根目录,不要直接进入gcc/ada/libgnat目录单独编译
  2. 确认已经完成GCC的bootstrap编译,即已经执行过make完成GCC主程序的编译
  3. 执行make all-target-libada,命令会自动完成libgnat、libgnarl的全量编译,过程中会自动生成你需要的libgnarl.lst文件,存放在编译目录的对应target子目录下。
问题3:是否有通用的libada编译指引可供参考?

通用编译流程如下:

  • 前置依赖:编译前需要提前安装一个可用的旧版本GNAT编译器(二进制版本即可),因为编译Ada运行库本身需要Ada编译器支持,这是GCC编译Ada语言的循环依赖要求,绝大多数人编译后缺失libada都是漏了这一步,直接用无Ada支持的GCC编译Ada目标。
  • 配置阶段:你使用的配置参数基本正确,若需要编译跨平台的libada,可额外添加--target=参数指定目标架构,也可按需添加--enable-shared参数生成动态库。
  • 编译阶段:先执行make all完成GCC主体编译,再执行make all-target-libada专门编译Ada运行库,不要单独进入源码目录用gprbuild编译,全量编译流程会自动处理所有依赖文件的生成和路径配置。
  • 安装阶段:执行make install-target-libada即可将libgnat、libgnarl、对应的GPR配置文件、Ada标准头文件全部安装到你之前configure指定的prefix目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:24:02