我正在尝试更新使用20年的Ada编译器,但是您需要一个Ada编译器来构建GCC + Ada(9.2.0)的某些部分。

gnatmake大约在2000年,可能称为GCC 2.8.1。叹。

我已经成功构建了GCC的几个Ada部分,但是这个libgnat/文件使我难以理解:

编译libgnat/s-excmac.adb

$ gnatmake s-excmac.adb
gcc -c -gnatpg s-excmac.adb
s-excmac.ads:134:44: identifier expected
gnatmake: "s-excmac.adb" compilation error


因此s-excmac.ads中有问题的行是:

   type GCC_Exception_Access is access all Unwind_Exception;
   --  Pointer to a GCC exception

   procedure Unwind_DeleteException (Excp : not null GCC_Exception_Access );  -- <-- THIS ONE!

   pragma Import (C, Unwind_DeleteException, "_Unwind_DeleteException");

   --  Procedure to free any GCC exception


我不明白这段代码有什么问题。我可以使用一些世纪之交的Ada语法替换来编译GCC-Ada的这一部分吗?

我有点Ada NOOB,所以请保持温柔。

编辑:似乎试图“修复” s-excmac.adb / s-excmac.ads是一个傻瓜的差事。抵抗力较小的途径是下载一个预先构建的编译器,然后从中开始构建更高版本的GCC。

最佳答案

如果编译器早于2005,则编译Ada-2005 not null access声明将是一个问题。

要继续前进,您可以删除单词“ not null”,该行将编译并运行,但是如果您传递空访问类型,则不会获得所需的行为(异常中止)。更好的解决方法是显式检查包装程序,并在适当时引发异常或调用基础C procoughvoid函数。

此外,可能还有其他Ada-2005功能也无法编译,因此更好的选择是升级编译器。

关于gcc - 使用非常老的gnatmake构建GCC-Ada,语法错误,编译s-excmac.adb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60271180/

10-12 12:46