我正在使用这个 windows version 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
我尝试将上述由 flex 和 yacc 的原始 linux 版本生成的文件复制到 Visual studio 项目文件夹中。但这也给出了相同的链接错误。
最佳答案
这可能是因为您在一个项目中将 C++ 和 C 文件混合在一起。因此,如果您将 y.tab.h
包含到 .cpp
文件中,请确保它具有 extern "C"{ ... }
围绕着它。像这样:
extern "C"
{
#include "y.tab.h"
}
更新:根据您的评论,我了解到 y.tab.c
现在是 y.tab.cc
。这会导致链接时间错误。这可以通过将两个文件都制作为 C++(或 C)来解决。或者通过将 y.tab.h
中的 yylval
声明更改为
#ifdef __cplusplus
extern "C" YYSTYPE yylval;
#endif
关于c++ - 在 Visual Studio 中使用 lex 和 yacc 输出时出现链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770442/