vs2008编译ParserGenerator2库

在看编译原理,看到了Lex这一节。网上搜发现,Parser Generator作为当前最好用的Windows环境LEX/YACC工具而被广泛应用。

于是想学着用一下PG。

没想到配置的问题就折腾了一天,不过收获还是很多的。

参考资料:

http://blog.csdn.net/itic3721/article/details/6225866

相当感谢这位作者的帮忙,不过也有些小问题。

实验目标:

  在VS2008中编译PG2库,使两者能结合使用。

实验过程:

1、从网上下载了PG2,安装。

2、按照上面网址的做法一步步做

1)下载Parser+Generator+2.rar,经过改动的ParGen文件,在libbuilder里可以选择VS2008

  注:放在另外一个文件夹。其实就是用一下改动后的配置文件。默认情况下,编译后的文件还是放在1中的安装文件夹中。

2)按照http://dev.firnow.com/course/3_program/c++/cppjs/200798/70287.html这个页面设置bin、lib、include

  注:这一步没有做,因为URL已经失效了。

3)把source里面的yywspdbg.c、yywspvar.c、yyasldbg.c、yyaslvar.c、yyaspdbg.c、yyaspvar.c、yydllm.c、yywsldbg.c、yywslvar.c扩展名改成.bak(也就是把这几个源文件废了.)

3、开始编译。选项如下:

 

Compiler Version: vs2008

Unicode: True

Treat wchar_t as built_in type:true;

Compiler Bin Directory: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\BIN

Compiler Bin Directory(2): C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\COMMON7\IDE

Compiler Include Library: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\INCLUDE

Compiler Include Library(2): C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\ATLMFC\INCLUDE

Compiler Include Library: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\LIB

Compiler Include Library(2):  C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 9.0\VC\ATLMFC\LIB

 

编译成功。

4、尝试编译例子calc。

在PG中生成myparser.h和myparser.c后,导入到vs2008的新建空项目中。

设置VC++目录中的各种路径:库文件,包含文件,源文件。(就是将pg2安装文件夹下的各种路径导进来了)

设置C/C++->预处理器->预处理器定义:YYDEBUG

链接器->输入->附加依赖项:ylmtrd.lib

C/C++->预处理器->运行库:Mtd(和ylmtrd.lib对应!!很重要!!)

开始运行。

5、发现错误

error LINK2001(或2019):无法解析的外部符号:

_yytop, _yyparse......

6、解决方法:

仔细看了代码

#include <yypars.h>

在yypars.h能找到以上的"无法解析的外部符号"的声明,但是定义为什么不见了?

用dumpbin工具导出ylmtrd.lib的函数内容到txt,查找以上的外部符号,也找到声明了。

但为什么链接时候找不到定义了?

 

回头看了参考网址中的方法:

“把source里面的yywspdbg.c、yywspvar.c、yyasldbg.c、yyaslvar.c、yyaspdbg.c、yyaspvar.c、yydllm.c、yywsldbg.c、yywslvar.c扩展名改成.bak(也就是把这几个源文件废了.)”

可能是这里出了问题?把一些符号或者函数的定义给“注释”掉了?

于是尝试这把这些文件的后缀改成cpp,重新编译

编译到yydllm.cpp的时候出现yyinit()和yydelete()的错误.但这是在生成某个dll的时候出错的,而我目前只用静态库,不用dll。所以不管这些问题

编译结束后,重新在vs2008下build

出现一些错误:

符号重定义,和LIBCMTD.lib冲突了

在忽略特定库中,写上LIBCMTD.lib

然后build,成功了

 

收获:

1、对vc的配置又重新弄了一遍,还有静态库的一些知识。

2、中间还尝试用nmake编译例子,参考网址中下载的文件中已经包含了makefile文件,但是一直没有成功。有时间要好好琢磨一下nmake和makefile

3、知道了一个道理:网上的攻略教程不一定可靠,还是要自己好好动脑筋,多动手。碰到问题,就去努力解决。

 

以上是今天的体会心得。谢谢网上丰富的资料。

大家有任何建议,不妨提出来,多多交流,互相促进。

posted @ 2012-10-20 23:51  海阔天空男儿当自强  阅读(570)  评论(0编辑  收藏  举报