2014-07-09 5 views
0

이다가 발생크기가 너무 작 허용 최소 문제 다음, 64

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

오류는 다음과 같습니다

terminal_interface - 저주 마우스. 광고 : 180 : 10 : 'Event_Mask'의 크기가 너무 작아 허용되는 최소값은 64

어떻게 해결할 수 있습니까?

+0

좋은 시작점은 terminal_interface-curses-mouse.ads:180:10을 둘러싼 코드를 표시하는 것이고 더 구체적으로 문제의 Event_Mask를 정의하는 모든 코드를 표시하는 것입니다. 우리는 도와 드리겠습니다. 그러나 여기에서 화면을 읽을 수는 없습니다 ... –

답변

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의 담당자 절은 다음과 같이 입력 Event_Mask의, Bstate 정의

Bstate at 0 range 128 .. 159; 

이이 유형을 기반으로 내 시스템에서 이 <ncurses.h>이고 unsigned입니다. unsigned_long이 64 비트이고 C의 unsigned 유형이 32이면 컴파일러에서 불만을 제기합니다.

이 수동으로

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

또는

type Event_Mask 라인을 변경하려고, 무슨 일이 일어나고 있는지 경우 희망에 새로운 유형의 충돌을 유발하지 않고 "너무 작은 크기"문제를을 피할 수
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 가정하면 .h 파일에 unsigned으로 정의된다, 그것은 당신이 수동으로 변경해야하고, 정말 .m4 파일 및 발전기 권리를 알아 내기 위해 고정 할 필요가

type Event_Mask is new Interfaces.C.unsigned; 

말을 단지뿐만 아니라 작동합니다 이 때문에 ncurses의 버그로 간주되어야합니다.

+0

위의 모든 것; 그러나'configure '를 읽으면,'--with-mmask-t ='unsigned long''을 사용하여 구성 할 수 있습니다. –