linux - "Event_Mask"的大小太小,允许的最小值为 64

标签 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: size for "Event_Mask" too small, minimum allowed is 64

如何解决这个问题?

最佳答案

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

type Event_Mask is new Interfaces.C.unsigned_long;

但是 Mouse_Event 的代表子句定义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_t定义为unsigned.h文件,它应该也可以说

type Event_Mask is new Interfaces.C.unsigned;

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

关于linux - "Event_Mask"的大小太小,允许的最小值为 64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646443/

相关文章:

c++ - 通过 Linux 将字节文件通过管道传输到 C++ 程序并逐字节读取?

linux - root `PATH` 的脚本更改并在重新启动后永久反射(reflect)它

MySQL 客户端/服务器 : TCP response packet with ACK flag but without PSH

linux - Nagios - 接口(interface) IP 检查脚本

C-浮点异常

visibility - 从子包中隐藏记录

java - 在 Android 中使用 Ada 代码

windows - 为什么通过 FFI 接口(interface)从 Rust 调用 Ada DLL 时会卡在 adainit?

ncurses - native 调用接口(interface) : how to translate "wchar_t"?

macos - 如何在 os x、centos 6 上构建 goncurses