博客园  :: 首页  :: 联系 :: 管理

VS2005下成功编译Pwlib

Posted on 2006-12-07 22:28  sunrack  阅读(2717)  评论(1编辑  收藏  举报
本人经过反复测试,终于在VS2005下成功编译Pwlib,总结如下,希望对有需要的朋友有所帮助,少走弯路。

版本:pwlib-v1_10_2-src.zip

一、安装插件
安装方法与在VS2003下编译Pwlib一样,详见我的另外一篇文章:

在Windows VS.NET 2003 下编译 PWLib 总结

二、用VS2005打开pwlib.sln
注意:必须用VS2005打开pwlib.sln,由升级向导进行转换,如果直接打开pwlib.dsw将无法生成ptbuildopts.h

三、首先在Release方式下重新生成项目 configure,这样将在 \pwlib\下生成configure.exe,该程序在重新生成库文件时用于搜索插件,生成\pwlib\include\ptbuildopts.h 编译配置文件。

注意:编译时发生错误:

.\configure.cpp(552) : error C2065: 'i' : undeclared identifier

这是由于C++\CLR兼容ISO标准,循环变量的作用域仅限于循环体中,做如下修改:



修改后成功编译通过。

四、在Debug方式下重新生成项目MergeSym
重新生成时,将生成文件 \pwlib\include\ptbuildopts.h

注意:该操作将先后重新编译Console、Console Components、MergeSym这三个项目。编译结果:Console、Console Components成功生成,但MergeSym编译错误:



编译错误修改:

1、\pwlib\tools\mergesym\mergesym.cxx(197) : error C2065: 'inc_index' : undeclared identifier

错误原因同上,也是循环变量的作用域问题,

将168行的
for (PINDEX inc_index = 0; inc_index < include_path.GetSize(); inc_index++) {
修改为:
PINDEX inc_index = 0;
    for (inc_index = 0; inc_index < include_path.GetSize(); inc_index++) {

2、\pwlib\tools\mergesym\mergesym.cxx(280) : error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'

错误原因是类型转换的问题


char * namepos = strchr(line, '|');
修改为
char * nameposTemp = new char[line.GetLength()];
char * namepos = strchr(strcpy(nameposTemp, line), '|');
delete nameposTemp;

3、\pwlib\tools\mergesym\mergesym.cxx(298) : error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'

错误原因同上


char * endunmangle = strrchr(unmangled, ')');
修改为
char * endunmangleTemp = new char[100];
char * endunmangle = strrchr(strcpy(endunmangleTemp, unmangled), ')');
delete endunmangleTemp;

修改完后,在Debug方式下重新生成项目MergeSym,将成功生成Console、Console Components、MergeSym这三个项目。

五、在Release方式下,重新生成项目PTLib,输出库文件\pwlib\Lib\TLib.dll

结果成功生成四个项目: Console、Console Components、MergeSym、PTLib





 
六、切换到Debug方式,生成项目PTLib,输出库文件\pwlib\Lib\PTLibd.dll




至此,已经成功生成文件 PTLibd.dll 和 PTLib.dll。