Ошибка связи при использовании вывода lex и yacc в Visual Studio - PullRequest
1 голос
/ 22 января 2011

Я использую эту версию Windows flex (lex) и bison (yacc) для переноса моего компилятора запросов из linux в Windows. Выходные файлы lex.yy.c, y.tab.c и y.tab.h генерируются правильно. Однако я получаю следующую ошибку ссылки.

Error 29 error LNK2001: unresolved external symbol _yylval G:\Project\lex.yy.obj QC
Error 30 error LNK1120: 1 unresolved externals G:\Project\QC.exe QC

Я попытался скопировать вышеупомянутые файлы, сгенерированные оригинальными версиями linux flex и yacc, в папку проекта Visual Studio. Но это также дает ту же ошибку ссылки.

Ответы [ 2 ]

1 голос
/ 22 января 2011

Это может произойти, потому что вы смешиваете файлы C ++ и C вместе в одном проекте.Поэтому, если вы включаете y.tab.h в файл .cpp, убедитесь, что в нем есть extern "C" { ... }.Вот так:

extern "C"
{
    #include "y.tab.h"
}

Обновление: Из вашего комментария я понял, что y.tab.c - это y.tab.cc сейчас.Это приводит к ошибке времени ссылки.Это можно исправить, сделав оба файла C ++ (или C).Или изменив объявление yylval в y.tab.h на

#ifdef __cplusplus
extern "C" YYSTYPE  yylval;
#endif
0 голосов
/ 23 января 2011

Мне кажется, что вы связываетесь с библиотекой для flex или bison (некоторое время назад я ее использовал, поэтому не могу точно вспомнить, с чем вы должны связываться) в unix, но не делал этого в windowsВы связываете с теми же библиотеками в Windows?

...