2011-07-03 36 views
5

我将把用于unix的C项目移植到windows中。到目前为止,我可以编译它,但不能编译。我得到的问题是,一些这是在头文件中声明该功能在files.so我收到以下错误YACC定义:yacc和野牛在视觉工作室

error LNK2001: unresolved external symbol function_name 

我在加入.Y和.L文件该project.I的源目录觉得我不能端口YACC文件到Windows版本或我做的事情stupid.I搜索它的网络,但不能得到正确的教程it.Could请你让我知道

  1. 如何在项目中添加.y或.l文件。
  2. 我将如何使这些文件兼容到Windows?
  3. 如何将它们与其他目标文件链接。

编辑

我试图与该.l文件变更为使用flex.exe。继.yy.c文件是它

 c:\> flex.exe name.l 

假设的命令,无论是flex.exe和名称。 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产生。所以我认为我不能使bisonwindows兼容。所以请问他我该如何解决这个问题?

在此先感谢。

回答

7

您需要为.y和.l文件添加自定义生成规则。要做到这一点,你需要

  1. 创建一个虚拟.c文件为.L文件和文件.Y
  2. 添加.L,.Y和两个.c文件到项目
  3. 右键单击该文件.L,选择属性
  4. 配置 - >所有配置
  5. 常规 - >产品类型 - >自定义生成工具
  6. 应用
  7. 自定义生成工具 - >常规 - >命令设备 - >flex -olexer.c lexer.l
  8. 自定义生成工具 - >常规 - >输出 - >lexer.c
  9. 自定义生成工具 - >常规 - >附加Dependencies->parser.y parser.c
  10. 应用
  11. 选择。在解决方案资源管理
  12. 配置 - Ÿ文件>所有配置
  13. 常规 - >产品类型 - >自定义生成工具
  14. 应用
  15. 自定义生成工具 - >常规 - >命令设备 - >bison -oparser.c parser.y
  16. 自定义生成工具 - >常规 - >输出 - >parser.c parser.h

你也需要有flex.exe,bison.exe和m4.exe在系统搜索路径。另一个缺点是VS没有正确地获得依赖关系,所以当你在解析器或词法分析器文件中改变某些东西时,你需要手动重建项目。

+0

这是每次使用f/lex和/或bison/yacc启动新项目时必须设置的东西吗?或者你可以设置一次,VS会永远记住这些设置吗?另外,有没有推荐使用这些库的IDE?在使用gcc进行编译之前,必须运行f/lex和/或bison/yacc时,从命令行执行操作有时会很烦人。 – velocirabbit

+1

@velocirabbit这是一个项目特定的设置。所以你需要为每个.l或者.y文件配置它。 – Rudi