我将将用于unix的C项目移植到Windows中。到目前为止,我可以使它编译但不能编译。我遇到的问题是,在头文件中声明的某些函数在yacc文件中定义。所以我遇到以下错误:

 error LNK2001: unresolved external symbol function_name

我在项目的源目录中添加了.y和.l文件。我认为我无法将yacc文件移植到Windows版本中,或者我做了一些愚蠢的事情。你请让我知道
  • 如何在项目中添加.y或.l文件。
  • 如何使这些文件与Windows兼容?
  • 如何将它们与其他目标文件链接。

  • 编辑

    我尝试使用.l .yy.c文件更改为flex.exe文件。以下是它的命令
         c:\> flex.exe name.l
    

    假设flex.exe和name.l都在C;>中,并且我在先前存在的项目的解决方案中加载了所有这些文件 .l .y(previously present for parsing in unix system) .yy.c(corrsonding yacc file for windows)。编译后,我得到以下内容
     Can't read the header file  parserheaderfile.h
    

    这是需要由unix中的 bison 生成的头文件
    系统。所以我认为我无法使 bison windows兼容。所以请他给我,我该如何解决这个问题?

    提前致谢。

    最佳答案

    您需要为.y和.l文件添加自定义生成规则。为此,您需要

  • 为.l文件和.y文件创建一个虚拟.c文件
  • 将.l,.y和两个.c文件都添加到项目
  • 右键单击.l文件,然后选择属性
  • 配置->所有配置
  • 常规->项目类型->自定义构建工具
  • 应用
  • 自定义构建工具->常规->命令行-> flex -olexer.c lexer.l
  • 自定义构建工具->常规->输出-> lexer.c
  • 自定义构建工具->常规->其他依赖项-> parser.y parser.c
  • 应用
  • 在解决方案资源管理器
  • 中选择.y文件
  • 配置->所有配置
  • 常规->项目类型->自定义构建工具
  • 应用
  • 自定义构建工具->常规->命令行-> bison -oparser.c parser.y
  • 自定义构建工具->常规->输出-> parser.c parser.h

  • 此外,您还需要在系统搜索路径中包含flex.exe,bison.exe和m4.exe。另一个缺点是VS无法正确获得依赖关系,因此当您在解析器或词法分析器文件中进行某些更改时,您需要手动重建项目。

    关于visual-studio - yacc和野牛在视觉工作室,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6563378/

    10-11 22:09
    查看更多