我遇到了一个挂在异常上的ADA程序的问题。以下是我正在编译的测试程序
$ gnatmake divide_by_zero.adb
gcc -c divide_by_zero.adb
divide_by_zero.adb:6:19: warning: division by zero
divide_by_zero.adb:6:19: warning: "Constraint_Error" will be raised at run time
gnatbind -x divide_by_zero.ali
gnatlink divide_by_zero.ali
我的gnatmake版本是
$ gnatmake --version
GNATMAKE 4.8.3
divide_by_zero.adb的内容是
$ cat divide_by_zero.adb
procedure divide_by_zero is
result : Integer;
denominator : Integer;
begin
denominator := 0;
result := 1 / denominator;
end divide_by_zero;
程序执行的输出是
$ ./divide_by_zero.exe
raised CONSTRAINT_ERROR : divide_by_zero.adb:6 divide by zero
** Program hangs, Ctrl-C does nothing, Ctrl-D does nothing
** I have to go to Task Manager to stop divide_by_zero.exe
我想知道是否有其他人在gonmake版本4.8.3下编译的ADA程序存在问题,挂在任何类型的异常上?我的ADA代码有问题吗?我的安装有问题吗?我目前在cygwin上运行代码。
感谢。
答案 0 :(得分:2)
在Debian 8,gcc4.9.1中看起来很好并且工作正常(即引发异常并退出:-)。
brian@Gannet:~/Ada/Play$ gnatmake divide_by_zero.adb
gcc-4.9 -c divide_by_zero.adb
divide_by_zero.adb:6:19: warning: division by zero
divide_by_zero.adb:6:19: warning: "Constraint_Error" will be raised at run time
gnatbind -x divide_by_zero.ali
gnatlink divide_by_zero.ali
brian@Gannet:~/Ada/Play$ ./divide_by_zero
raised CONSTRAINT_ERROR : divide_by_zero.adb:6 divide by zero
brian@Gannet:~/Ada/Play$
所以我相信Cygwin的安装已经破了。
可能值得使用Gnat-2014 Libre版进行测试,但我认为由于许可条件,FSF编译器是您的偏好。
或者,至少有两种方法可以获得针对Windows的FSF Gnat编译器。
我只是通过安装gnat-mingw-w64-x86-64并在x86_64-w64-mingw32-gnatmake divide_by_zero.adb
(奇怪的是,它构建了一个32位的Windows exe,但该程序包在64位主机上运行,如果我重新启动到Windows,则可执行文件运行正常。)
我也听说过有关FSF Gnat / GCC mingw编译器的TDM版本的好消息here根据您是否需要构建32位或64位Windows可执行文件,可以选择。我想你需要下载" Ada支持" package(向下滚动!)和基本编译器。
如果你真的需要cygwin,你可能不得不继续挖掘,或者向cygwin社区报告这个失败并且(礼貌地!)推动回答。如果您这样做,请在此处更新问题。