Ошибка связи при использовании вывода lex и yacc в Visual Studio
Я использую эту версию 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 ответа
Это может произойти, потому что вы смешиваете файлы 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
Мне кажется, что вы связываетесь с библиотекой для flex или bison (давно я ее использовал, поэтому не могу точно вспомнить, с чем вы должны связываться) в unix, но не делал этого в windows. Вы связываете с теми же библиотеками на Windows?