Ошибка связи при использовании результатов 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. Но это тоже дает ту же ошибку связи.
Ответы
Ответ 1
Это может произойти из-за того, что вы смешиваете файлы С++ и C вместе в одном проекте. Поэтому, если вы включаете y.tab.h
в файл .cpp
, убедитесь, что вокруг него есть extern "C" { ... }
. Вот так:
extern "C"
{
#include "y.tab.h"
}
Обновление: Из вашего комментария я понял, что y.tab.c
теперь y.tab.cc
. Это приводит к ошибке времени соединения. Это может быть исправлено путем создания обоих файлов С++ (или C). Или, изменив объявление yylval
в y.tab.h
на
#ifdef __cplusplus
extern "C" YYSTYPE yylval;
#endif
Ответ 2
Это похоже на то, что вы связываетесь с библиотекой для flex или bison (прошло некоторое время с тех пор, как я использовал ее, чтобы я не мог точно помнить, с чем вам нужно связать) в unix, но не делать этого в окнах. Вы связываетесь с одними и теми же библиотеками в окнах?