eXosip入门(三):eXosip库的验证

      本次我们来验证一下得到的eXosip库是否可用。

      PS:为什么要验证呢?不是编译成库后就可以直接使用么?理论上是这样的,但是现实是残酷滴,编译成库文件,只是噩梦的开始,学习的道路不会一帆风顺。

      本次只是验证eXosip库是否可用,不需要很复杂的代码,测试代码如下:

// test.cpp

#include "stdafx.h" #include <eXosip2/eXosip.h>

#include <stdio.h> #include <stdlib.h> #include <Winsock2.h>

int _tmain(int argc, _TCHAR* argv[]) {     int i;

    i = eXosip_init(); // 初始化eXosip和osip协议栈

    if (i != 0)         return -1;

 

return 0; }

    操作步骤如下:
    1、在VS2008里创建win32控制台程序工程;
    2、将上面的代码保存成test.cpp并加入工程中;
    3、将libosip源码包的include目录下的osip2、osipparser2两个文件夹及osip2.dll、osipparser2.dll、osip2.lib、osip2.lib、osipparser2.lib拷到工程内,并在工程设置里面设置好包含路径;
    4、需要在工程属性——》链接器——》附加依赖项,增加以下库文件:

           eXosip.lib
           osip2.lib
           osipparser2.lib
           Iphlpapi.lib
           Dnsapi.lib
           ws2_32.lib;
    5、然后点击编译,你会惊奇的发现竟然会出现那么多的编译错误!Oh!My GOD!噩梦开始了!!

    大致的编译错误如下:

1>eXosip.lib(eXosip.obj) : error LNK2019: 无法解析的外部符号 _osip_transaction_set_naptr_record,该符号在函数 __eXosip_transaction_init 中被引用
1>eXosip.lib(eXtl_tcp.obj) : error LNK2019: 无法解析的外部符号 _osip_realloc,该符号在函数 __tcp_tl_recv 中被引用
1>eXosip.lib(eXutils.obj) : error LNK2001: 无法解析的外部符号 _osip_realloc
1>eXosip.lib(eXtl_tcp.obj) : error LNK2019: 无法解析的外部符号 _osip_strcasestr,该符号在函数 _handle_messages 中被引用
1>eXosip.lib(jrequest.obj) : error LNK2019: 无法解析的外部符号 ___osip_uri_escape_userinfo,该符号在函数 __eXosip_dialog_add_contact 中被引用
1>eXosip.lib(jresponse.obj) : error LNK2001: 无法解析的外部符号 ___osip_uri_escape_userinfo
1>C:\Users\Cheney\Desktop\SIP\eXosipTest\Debug\eXosipTest.exe : fatal error LNK1120: 4 个无法解析的外部命令

    产生这些错误是因为需要用到的一些函数在osip库在def文件中没导出。需要修改\libosip2-3.6.0\platform\vsnet目录下面的osip2.def、osipparser2.def两个文件,在文件的末尾导出这些函数,具体如下:

osip2.def:
    osip_transaction_set_naptr_record  @138
   
osipparser2.def:
    osip_realloc @416
    osip_strcasestr @417
    __osip_uri_escape_userinfo @418

 

    修改完毕后,重新编译整个解决方案,得到新的dll及lib,更新到eXosip测试工程里面,上述的编译错误即可解决。剩下的事情就是编译调试了。

    题外话:其实这些错误对于作者来说可能只是一时疏忽,忘记引出几个函数而已,但是对于初学者及新手来说往往造成巨大的麻烦,或者打击学习信心。本人记得就仅仅为了处理上面的错误,就耗费了一个上午的时间,查阅了大量的网页资料,才找到解决办法。

你可能感兴趣的:(eXosip入门(三):eXosip库的验证)