2012-12-26 7 views
7

Uczę się używać Flex (analizator leksykalny) i byłem kompilacji za pomocą następującego polecenia:Flex: niezdefiniowane odniesienia do `yywrap” tylko podczas kompilowania/łączenie oddzielnie

gcc -lfl -o test lex.yy.c

i wszystko jest dobrze. Jednakże chcę, aby połączyć go z innymi plikami, więc skompilować i połączyć je oddzielnie

gcc -c lex.yy.c

następnie

gcc -lfl -o test lex.yy.o

ale gcc mówi mi, że nie jest niezdefiniowana odniesienia do yywrap(). Co się tutaj dzieje?

Używam Flex 2.5.35, gcc 4.7.2 i ld 2,22

+5

czy próbowałeś dodać '-lfl' na końcu zamiast na początku? – Raj

+0

To działało. Dzięki! – Flukiluke

+0

okej, opowiem to jako odpowiedź. – Raj

Odpowiedz

15

dodać -lfl na końcu zamiast początku.

1

Ewentualnie, jeśli nie chcesz korzystać z biblioteki, tylko #define yywrap() 1 w pliku .l lub dostarczenie yywrap() metodę, która zwraca 1.

Jest udokumentowany.

1

Moje rozwiązanie było:

sudo apt-get install Flex

+4

Proszę wyjaśnić, jak już wygenerowałeś plik lex.yy.c bez wcześniejszego zainstalowania modułu Flex. – EJP

1

Zastosowanie gcc lex.yy.c -ll. W przeciwnym razie wygeneruje niezdefiniowane odniesienie do yywrap.

0

stworzyłem plik addon.c

int yywrap (void) 
{ 
    return 1; 
} 

i dodaje go do celu.

Powiązane problemy