上两个礼拜为了做一个xmpp的测试,安装了pwlib1.9.1(最新版本)和wxWindows2.6.2(最新版本),结果发现pwlib1.9.1不兼容wxWindows2.6.2版本,详情请看下面的编译过程:
注:我下的都是压缩版,非安装版,编译器vc.net2003,操作系统win2k profession...
一:编译wxWindows(2.6.2)
1. 到目录 build\msw\wx.dsw 让VC自己编译全部
注意:编译时的版本必须和以后需要使用的版本一致.(同时debug或者是relase)
设置包含include和库lib路径.
设置包含include和库lib路径.
二:编译pwLIB(1.9.1)
可参考网页http://blog.csdn.net/Richard2003/archive/2005/02/16/289353.aspx
1. 解压缩出pwlib文件夹
2. 解压出flexbison,把其tools文件夹放到c盘目录下。把C:\Tools放vc.Net到可执行的目录下面
3. 配制目录insallDir\PWLib\include加入Include directory
4. 运行一下configure.exe
5. 打开根目录下的pwlib.sln
6. 编译一下Console
7. 在 Executable Files path:加insallDir\PWLib\Lib
8. 在Lib path加insallDir\PWLib\Lib
三:.编译xmpptest过程
1.main.h中添加 #define _WINSOCKAPI_(不包含会显示winsock和winsock2重定义)
2.main.cpp中的void XMPPFrame::OnMessage(XMPP::Message& msg, INT)函数中的
if (msg.GetElement("data") == NULL){}语句添加如下语句:
wxString wxStrMsg = _T("收到消息:") ;
wxStrMsg +=wxString((msg.GetBody()).AsUCS2());
在void XMPPFrame::OnRosterChanged(XMPP::Roster&, INT)函数中修改语句
// g_id = m_RosterTree->AppendItem(rootID, (const char *)key);
g_id = m_RosterTree->AppendItem(rootID, wxString(key.AsUCS2()));
和
//wxTreeItemId i_id = m_RosterTree->AppendItem(g_id, (const char *)item.GetName());
wxTreeItemId i_id = m_RosterTree->AppendItem(g_id, xString((item.GetName()).AsUCS2()));
和
// m_RosterTree->AppendItem(i_id, (const char *)res);
m_RosterTree->AppendItem(i_id, wxString(res.AsUCS2()));
(为支持中文显示所做的修改)
(为支持中文显示所做的修改)
3. 出现错误: LINK : fatal error LNK1181: 无法打开输入文件“wxmswd.lib” 但是我编译出的wxWindows库中无此文件,察看链接器->输入中的附加依赖项,其中有wxmswd.lib;tiffd.lib;jpegd.lib;pngd.lib;regexd.lib;zlibd.lib这些lib没有。但是有wxtiffdlib;wxjpegd.lib;wxpngd.lib;wxregxdlib;wxzilbd.lib,我想可能是版本问题,lib名字不一样了。
所以把所有生成的lib包括进去wxbase26d.lib;wxbase26d_net.lib;wxbase26d_odbc.lib;wxbase26d_xml.lib;wxexpatd.lib;wxjpegd.lib;wxmsw26d_adv.lib;wxmsw26d_core.lib;wxmsw26d_dbgrid.lib;wxmsw26d_gl.lib;wxmsw26d_html.lib;wxmsw26d_media.lib;wxmsw26d_qa.lib;wxmsw26d_xrc.lib;wxpngd.lib;wxregexd.lib;wxtiffd.lib;wxzlibd.lib。编译链接都没有问题,但是运行后可以看到进程中有xmpptest.exe,但是没有对话框显示,调试得到错误,程序异常中断了,中断位置为malloc.c文件。
由此我认为pwlib1.9.1版本不兼容wxWindows2.6.2
我重新下了一个wxWindows2.4.2版本,到其src目录下编译wxWindows.dsw文件
编译好后,设置包含inclue和lib文件夹,再编译运行xmpptest,成功,运行有对话弹出,并可以登录,显示联系人列表,并可接收消息,但是显示不了中文。