我正在尝试更新使用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/