" Event_Mask"的大小太小,最低允许为64

时间:2014-07-09 06:08:40

标签: linux ada ncurses rhel

当我在red hat linux中创建ncurses-5.9时,发生以下问题:

gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA /home/xiaodobl/ncurses-5.9/Ada95/src/terminal_interface-curses-mouse.adb

错误是:

  

terminal_interface-curses-mouse.ads:180:10:" Event_Mask"的大小太小,最低允许为64

如何解决问题?

1 个答案:

答案 0 :(得分:0)

如果没有看到terminal_interface-curses-mouse.ads中的相关声明,我无法确定。但是,我怀疑Event_Mask的大小存在冲突。当我尝试它时,这条线被硬连接到terminal_interface-curses-mouse.ads.m4

type Event_Mask is new Interfaces.C.unsigned_long;

Mouse_Event的rep子句定义Bstate类型Event_Mask,如下所示:

Bstate  at 0 range 128 .. 159;

这取决于mmask_t<ncurses.h>的类型,我系统上的unsigned。如果unsigned_long为64位且C的unsigned类型为32,则编译器会抱怨。

如果发生这种情况,请尝试手动将type Event_Mask行更改为

type Event_Mask is new Interfaces.C.unsigned_long range 0 .. 2**32 - 1;
for Event_Mask'Size use 32;

type Event_Mask is new Interfaces.C.unsigned_long range 0 .. 2**32 - 1 with Size => 32;

希望避免“大小太小”问题而不会在其余代码中引起任何新类型冲突。但是,我还没有测试过它。

这应该报告为错误,因为Event_Mask的类型不应该像这样硬连线。

编辑:直到后来才发生这种情况,因为Event_Mask是派生类型,使用范围约束从Interfaces.C.unsigned_long派生它没有任何好处。假设mmask_tunsigned文件中定义为.h,它应该可以正常工作

type Event_Mask is new Interfaces.C.unsigned;

您仍然需要手动更改它,并且确实需要修复.m4文件和生成器以找出正确的类型,这就是为什么我认为这应该被视为ncurses中的错误