构建 GCC-Ada,使用非常旧的 gnatmake 编译 s-excmac.adb 时出现语法错误
Building GCC-Ada, Syntax error compiling s-excmac.adb with very old gnatmake
我正在尝试更新我们已有 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,所以请温柔点。
编辑:似乎尝试 "repair" s-excmac.adb
/ s-excmac.ads
是徒劳的。阻力较小的途径是下载预构建的编译器,然后从中开始构建后来的 GCC。
如果编译器早于 2005,编译 Ada-2005 not null access
声明将是一个问题。
要继续前进,您可以删除单词“not null
”,该行将编译并运行,但如果您传入空访问类型。更好的修复方法是包装程序显式检查,并引发异常或适当调用底层 C procoughvoid 函数。
此外,可能还有其他 Ada-2005 功能也无法编译,因此更好的选择是升级编译器。
Brian 对 not null
的看法是正确的。但是代码中可能有更多的 2005 年主义......
我相信维护者只会保证能够使用以前的版本构建编译器,这意味着构建 GCC 3,使用它构建 GCC 4,等等;您也许可以跳过一两个版本。未来漫长的日子!
我猜,建造 libgnat
是最新的一步。我的意思是您需要使用旧版本构建 "new-gcc",然后使用 "new-gcc" 构建 libgnat
。在这种情况下,您不会收到此错误。
我正在尝试更新我们已有 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,所以请温柔点。
编辑:似乎尝试 "repair" s-excmac.adb
/ s-excmac.ads
是徒劳的。阻力较小的途径是下载预构建的编译器,然后从中开始构建后来的 GCC。
如果编译器早于 2005,编译 Ada-2005 not null access
声明将是一个问题。
要继续前进,您可以删除单词“not null
”,该行将编译并运行,但如果您传入空访问类型。更好的修复方法是包装程序显式检查,并引发异常或适当调用底层 C procoughvoid 函数。
此外,可能还有其他 Ada-2005 功能也无法编译,因此更好的选择是升级编译器。
Brian 对 not null
的看法是正确的。但是代码中可能有更多的 2005 年主义......
我相信维护者只会保证能够使用以前的版本构建编译器,这意味着构建 GCC 3,使用它构建 GCC 4,等等;您也许可以跳过一两个版本。未来漫长的日子!
我猜,建造 libgnat
是最新的一步。我的意思是您需要使用旧版本构建 "new-gcc",然后使用 "new-gcc" 构建 libgnat
。在这种情况下,您不会收到此错误。