gloox环境搭建

17 篇文章 0 订阅
3 篇文章 0 订阅

Gloox是一个开源的跨平台的C++实现的XMPP协议开发包,目前的版本为1.0测试版,不过由于是测试版,故在实际项目使用中不便于使用,故仍用0.9.9.5版本,这是一个比较稳定的版本,提供了很多的功能支持。

当从gloox的官网中下载0.9.9.5之后,解压。可以看见里面含有一个SRC的文件夹,里面就是gloox的所有的头文件和源文件了。

在编译gloox中,根据了解,可以编译成DLL动态库的方式,也可以编译成表态lib库的方式,不过我在使用过程中,发现DLL动态库好象不怎么稳定,且老是报一些错误,并且其他人在使用中也提到这个问题,所以一般没有考虑用DLL库。大多数的使用者都是使用的是lib库,这个lib库我编译出来的比较大,20多M,个人觉得太大了,用起来不方便,所以就直接通过加入源代码的方式进行开发了。

那么如何加入gloox源代码呢?我是这样做的。

新建一个项目如textgloox,然后在textgloox目录下新建一个目录,叫gloox,在该目录下加入解压gloox开发包之后的SRC文件夹下的所有文件,将这些头文件和源文件拷贝至textgloox下的gloox目录文件中,然后在你新建的项目中加入这些头文件和源文件就可以了。不过为了清晰所见,建议在你新建的项目中加入一个筛选器,名为gloox,然后将gloox中的所有头文件和源文件加入至该筛选器目录内。这样就可以将gloox与你的项目文件分隔开来,以便于管理。同时由于gloox库在运行时,本身需要一些库的支持,所以需要加入一些其他的库,这些库是: ws2_32.lib Secur32.lib Dnsapi.lib Crypt32.lib。当然可能有些库并不是必须的,我也只是根据网上别人的建议加入的,并没有一个一个排查,我的主要目的是使用这个库来做开发,而不是其它。

好了,当你经过上面的操作之后,就可以编译你的工程了,不过,此时会提示一个找不到config.h.win文件,这个很简单,可以在源文件中将其注释掉就可以了,这个是个编译选项的配置文件,具体的我没细看,不过我不是将其注释掉(我试过,注释掉也没问题),而是将这个文件(在你下载的gloox包中和SRC同一级目录下能找得到)拷贝至你的工程中的gloox目录中,然后在提示找不到这个文件的源文件中,将其路径改为gloox下就可以了,说白了,就是去掉里面的那个“../”即可。

经过上面的步骤之后,应该能够在你的工程中使用gloox进行开发了。我的示例环境如下,以方便前面的叙述。

 

在我这个示例项目中,gloox筛选器里面就是所有的gloox头文件和源文件,是从下载下来的gloox解压后的SCR目录下的所有文件拷贝过来的,同时还有一个config.h.win文件。

我的开发环境是vs2005,不过VC6上应该也能通过,因为是通过加入源文件的方式进行的。

 

 

另外在编译时可以会出现的一些问题: 

 

1、建立工程。

新建一个mobile空工程。

加进文件就不多说了,将gloox的头文件、和cpp加进目录。

2、配置工程编译属性。

打开config.h,将config.h.win的目录由“../ config.h.win”改成“config.h.win”

2、设置工程属性。

这个根据需要自己配置一下,现在编译应该不用改也可以编译过,加到其他解决方案的时候可能会有问题,到时候看具体问题再具体改吧。

3、编译。

此时编译仍然会报错。解决如下:

1、/dns.cpp(346) : error C3861: 'getprotobyname': identifier not found

添加# include <winsock2.h>

添加#include <sstream>

 

 

2、error C2039: 'time' : is not a member of 'std'

将std::time(0)改为time(0)         去掉std

 

 

3、clientbase.cpp(502) : error C2440: '=' : cannot convert from 'unsigned char *' to 'unsigned short *'

 错误,将char类型修改为short即可

 

 

4、const std::string ClientBase::getID()中time没实现

改成:

#ifdef _WIN32_WCE

    char r[8+1];

    sprintf( r, "%08x", rand() );

    std::string ret( r, 8 );

    return std::string( "uid" ) + ret;

#else

    std::ostringstream oss;

    oss << ++m_idCount;

    return std::string( "uid" ) + oss.str();

#endif

 

 

5、“clientbase.cpp”文件中会出现 
    error C2440: '=' : cannot convert from 'unsigned char *' to 'unsigned short *'
错误,将char类型修改为short即可。
 
 
6、“dns.cpp”文件中会出现
    error C3861: 'getprotobyname': identifier not found
错误,将文件开头的
#if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
# include <winsock.h>
#elif defined( _WIN32_WCE )
# include <winsock2.h>
#endif
几句注释掉,换成
    #include <winsock2.h>
 
7、“connectionbosh.cpp”文件中会出现
    error C2039: 'time' : is not a member of 'std'
错误,将std去掉即可,这是因为VC2005编译器在全局实现了time函数,与std重复,我们只需引用全局的就好了。

 

 

 

来自:http://blog.csdn.net/qiuhong101/article/details/3362329

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值