2017-05-08 2 views
2

패키지 ABC와 같은 세 가지 레벨 패키지 이름으로 withs 스펙이 선언되었지만 AB 유닛이 없다고 불평하는 컴파일이 실패하는 Ada 유닛을 컴파일하려고합니다. AB.ads라는 파일 만 검색하고 ABC.ads는 검색하지 않는 것 같습니다. gcc에서 올바른 파일을 찾는 방법은 무엇입니까? 도움을 주셔서 감사합니다. Gcc가 Ada가있는 유닛을 인식하지 못합니다.

답변

5

with A.B.C;A 및 의 withA.B.C을 의미합니다. 올바른 파일을 찾지 만 다른 두 파일도 필요합니다. 모든 종속성을 검색 경로에서 사용할 수 있는지 확인하십시오.

GNAT/gcc가 예상하는대로 파일 이름이 소문자 (a.ads, a-b.ads, a-b-c.ads)인지 확인하십시오.

1

도트 연산자는 Ada 패키지 간의 특별한 관계가 있습니다. with A.B.C은 패키지 C가 패키지 B의 하위이고 B가 패키지 A의 하위임을 의미합니다. 이는 상위 패키지가 없으면 하위 패키지도 사용할 수 없음을 의미합니다. 즉, 하위 패키지에 with 문을 허용하려면 부모 패키지가 있어야하지만 비어있을 수 있습니다. 따라서, 당신은 B 다음과 같이하는처럼 패키지를 만들어야합니다 스펙이 절차가없는 경우,이 패키지 본체를 추가 할 수 없습니다 것을

-- Spec 
package A is 
    -- Empty spec 
end A; 

-- Spec 
package A.B is 
    -- Empty spec 
end B; 

-- Spec 
package A.B.C is 
-- Definitions of package C 
end C; 

참고. with A.B.Cwith Awith A.B을 의미하는지 여부는 런타임 시스템의 구성에 따라 달라집니다.

+0

'pragma Elaborate_Body;'(또는 해당 [aspect] (http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-K-)를 추가하면 달리 금지 된 패키지 본문을 가질 수 있습니다. 1.html # p22))를 사용하십시오. 그리고 RTS 설정이'Ada.Strings.Unbounded;와 함께 할 것인가와 관련이 있다고 믿지 않는다.'Ada.Strings'가 보여진다. –

관련 문제