在UBI8中构建GNAT时无法启动源码编译的问题咨询
在UBI8环境中用系统编译器构建GNAT的可行性分析
核心结论
UBI8自带的系统编译器(包括安装的gcc-gnat包)无法直接用来构建GNAT,根源在于UBI8的gcc-gnat包与CentOS7的实现逻辑不同——UBI8版本仅提供独立的GNAT工具链,并未给系统原生GCC添加Ada前端支持。
问题本质
你遇到的configure: error: GNAT is required to build ada错误,是因为GCC源码构建Ada前端时,要求检测到与系统GCC深度集成的Ada编译能力,而非单独的GNAT工具:
gnat --version能正常输出版本,仅证明独立GNAT工具已安装;gcc -c a.adb报错,直接确认系统GCC未集成Ada前端,不符合源码构建的检测条件。- CentOS7的
gcc-gnat包会同时为系统GCC添加Ada前端,因此可以用来引导GNAT构建,但UBI8的包拆分了功能,仅提供独立GNAT工具,不扩展系统GCC的编译能力。
替代解决方案
方案1:指定独立GNAT作为引导编译器
利用UBI8已安装的独立GNAT工具,调整configure参数,明确指定用它作为Ada编译入口:
../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto,ada \ --with-gnat=$(which gnatgcc)
注:gnatgcc是UBI8中GNAT提供的兼容GCC规范的Ada编译入口,需确保它在当前环境PATH中。
方案2:先构建基础GCC,再二次编译带Ada的版本
- 先编译不含Ada的基础GCC,获得完整的宿主编译环境:
mkdir build-base && cd build-base ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto make -j$(nproc) make install
- 用新编译的GCC作为宿主,再次配置并编译带Ada的完整版本:
mkdir build-ada && cd build-ada ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto,ada \ --with-gcc=/usr/local/bin/gcc make -j$(nproc) make install
这种方式绕开了系统GCC无Ada前端的限制,用自行构建的完整GCC来引导GNAT编译。
方案3:安装完整Ada开发包(需对应源支持)
若环境允许,可添加Red Hat官方开发源,安装gcc-ada包(注意与gcc-gnat的功能差异),该包会为系统GCC添加完整的Ada前端支持,但UBI8默认公共源可能未包含,需对应订阅权限。
内容的提问来源于stack exchange,提问作者markalian
相关产品推荐
相关产品推荐

