c++ - 在 Visual Studio 中使用 lex 和 yacc 输出时出现链接错误

标签 c++ visual-studio-2010 yacc lex

我正在使用这个 windows version flex (lex) 和 bison (yacc) 将我的查询编译器从 linux 移植到 Windows。 输出文件 lex.yy.cy.tab.cy.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/

相关文章:

C++如何对 vector 指针执行项目分配?

c++ - 边界框视锥体渲染 - 距离渲染 - OpenGL

visual-studio-2010 - App.config 或 Web.config 中连接字符串的 .gitignore 最佳实践

c - 如何创建用于嵌入 C 源代码片段的 Yacc/Lex 规则?

c++ - 'YYSTYPE' 没有成员

c++ - 动态插入字符串到 std::map

c++ - Qthread 调用只运行一次

.net - Visual Studio 2010 正在吞噬我的 DLL! - 构建后缺少引用的第三方 dll

.net - VSIX 项目模板不存在

c++ - Bison 解析器无法识别 "New"关键字