本人经过反复测试,终于在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行的
2、\pwlib\tools\mergesym\mergesym.cxx(280) : error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'
错误原因是类型转换的问题
将
3、\pwlib\tools\mergesym\mergesym.cxx(298) : error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'
错误原因同上
将
修改完后,在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。
版本: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++) {
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;
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;
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。