2011-07-03 38 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