2017-11-21 4 views
1

flex 및 c 파일에 다음 코드를 작성했지만 컴파일러에서 "yywrap '에 대한 정의되지 않은 참조 오류가 표시됩니다. 이 같은정의되지 않음 참조 yywrap()

%{ 
int nchar; 
int nline; 
%} 
%% 
[\n] {nline++;} 
. {nchar++;} 
%% 
void main(void){ 
yylex(); 
printf("%d%d,nchar,nline"); 
} 

질문은 요청을받은 모든 답변은 #DEFINE의으로 yywrap (1) 이 경우 프로그램 실행하지만이 작동하지 않습니다하지만 난에 원하는 추가처럼 무시으로 yywrap 기능을 기반으로했다 작업.

int yywrap() { 
// open next reference or source file and start scanning 
if((yyin = compiler->getNextFile()) != NULL) { 
    line = 0; // reset line counter for next source file 
    return 0; 
    } 
return 1; 
} 

를 또는 그것을 사용하지 않기로 결정 :

+1

코드에 'yywrap'에 대한 참조가있어 링크되지 않습니다. 그것을 정의 했습니까? 스텁 정의를 자동으로 정의하지 않는 버전을 사용하고 있습니까? 'yywrap'을 억제하고 싶지 않으면 그것을 정의하거나 Flex를 업데이트해야합니다. – jdv

+0

나는 flex-2.5.4a-1-bin 버전을 사용한다. 어떻게 업데이트해야합니까? 다른 버전도 시도했지만 오류가 수정되지 않았습니다. i는 yywrap을 정의하지 않았습니다! – Nazanin

+0

가장 쉬운 방법은 스텁 정의를 정의하는 것입니다. 즉, 실제로'yywrap()'이 필요 없다면, 아무 것도 만들지 말라. 몇 가지 조사를 해본 적이 있다고했지만 https://stackoverflow.com/questions/1811125/undefined-reference-to-yywrap의 답변 중 많은 부분이 여기에 적용됩니다. 예를 들어'-lfl' 링커 옵션을 사용하고 있습니까? – jdv

답변

1

이처럼 직접 정의 할 수 있습니다

%option noyywrap 

를 또는 설치; 이는 레드햇 기반 운영체제의 경우와 같습니다 :

yum -y install flex-devel 
    ./configure && make