Ada 程序挂起异常,gnatmake
Ada Program Hangs on Exception, gnatmake
我遇到 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
我想知道是否还有其他人对在 gnatmake 版本 4.8.3 下编译的 ADA 程序挂起 any 类型的异常有疑问?我的 ADA 代码有问题吗?我的安装有问题吗?我目前是 运行 cygwin 上的代码。
谢谢。
在 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 编译器。
或者至少有 2 种方法可以获得一个工作的 FSF Gnat 编译器目标 Windows。
我已经通过安装 gnat-mingw-w64-x86-64 和 运行 在 Debian 上成功构建了 Windows 命令行应用程序x86_64-w64-mingw32-gnatmake divide_by_zero.adb
(奇怪的是,它构建了一个 32-bin Windows exe,但该包在 64 位主机上运行,如果我重新启动到 Windows,可执行文件运行正常)。
我也听说过有关 FSF 的 TDM 构建的好消息 Gnat/GCC 可用的 mingw 编译器 here 根据您需要构建 32 位还是 64 位,有多种选择 Windows 可执行文件。我认为您需要同时下载 "Ada support" 包(向下滚动!)和基本编译器。
如果您确实需要 cygwin,您可能需要继续挖掘,或者向 cygwin 社区报告此失败并(礼貌地!)寻求答案。如果您这样做,请在此处更新问题。
我遇到 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
我想知道是否还有其他人对在 gnatmake 版本 4.8.3 下编译的 ADA 程序挂起 any 类型的异常有疑问?我的 ADA 代码有问题吗?我的安装有问题吗?我目前是 运行 cygwin 上的代码。
谢谢。
在 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 编译器。
或者至少有 2 种方法可以获得一个工作的 FSF Gnat 编译器目标 Windows。
我已经通过安装 gnat-mingw-w64-x86-64 和 运行 在 Debian 上成功构建了 Windows 命令行应用程序x86_64-w64-mingw32-gnatmake divide_by_zero.adb
(奇怪的是,它构建了一个 32-bin Windows exe,但该包在 64 位主机上运行,如果我重新启动到 Windows,可执行文件运行正常)。
我也听说过有关 FSF 的 TDM 构建的好消息 Gnat/GCC 可用的 mingw 编译器 here 根据您需要构建 32 位还是 64 位,有多种选择 Windows 可执行文件。我认为您需要同时下载 "Ada support" 包(向下滚动!)和基本编译器。
如果您确实需要 cygwin,您可能需要继续挖掘,或者向 cygwin 社区报告此失败并(礼貌地!)寻求答案。如果您这样做,请在此处更新问题。