osip和exosip在windows下的编译静态库

时间:2022-01-29 04:49:31

1. 微软的platform sdk xp-sp2安装 : http://hi.baidu.com/xiquegg/blog/item/a9b1eea3d54d998746106478.html

2.下载源代码:

libosip2-3.0.1.tar.gz:  http://ftp.gnu.org/gnu/osip/

3..编译过程:
===================================================
文章可以任意转载,但是请注明出处 http://hi.baidu.com/yangkaiii
===================================================

编译osip,exosip协议栈的时候遇到很多的问题,不过终于通过了,现在将整个编译的过程和其中遇到的问题详细总结出来。

开发环境:Windows XP SP2 VC++ 6.0

(一)编译osip的静态链接库(*.lib)和动态链接库(*.dll),以便我们自己开发的程序能够使用它们来成功编译和执行。

1. 得到OISP的解析器开发库(osipparser2.lib,osipparser2.dll):

Ø osipparser2.lib:

· 首先创建一个新的Win32静态链接库工程(Win32 Stastic Library),然后将oSIP版本*.*.*下的src目录下的osipparser2目录下的所有文件都考到我们刚创建的工程的根目录下,然后再在VC6上操作:Project->Add to Project->Files,将所有的源程序和头文件都加入到工程内,然后保存工程,。

· 再将oSIP源码包中的Include目录下的osipparser2文件夹直接拷到VC6的安装目录的Include文件夹下(如:D:\Program Files\Microsoft Visual Studio\VC98\Include),或者在Tool->Options->Directories里设置路径也行(这样就不用拷贝文件了,直接把oSIP源码包所在的目录加进来就可以了)。

· 多线程编译,不然之后调用osip线程库时会出错。

ü 在Project->Setting->C/C++中“分类”一项中选择“常规”,然后在“预处理程序定义”一项中,加入OSIP_MT,MT,NEW_TIMER三个宏以支持多线程;

ü 在选择“分类”项中的“Code Generation”,在“Use run-time library”中选择“Multithread”,多线程编译。

· 因为VC6自带的开发库太老了,之后再编译exosip的时候会出现很多莫名其妙的错误,所以顺便在这里就先升级一下系统的的Platform SDK(可以从微软的网站去下),安装在F盘(F:\psdk include & lib[1]),然后在VC6中使用这个PSDK,在Tool->option->Directories里设置,在“路径”中加入“F:\psdk include & lib[1]\Include”即可。

·OK,现在可以编译工程了(为了防止日后返工,所以这里做了比较多的工作),编译后在Debug文件夹得到了osipparser2.lib。

Ø osiparser2.dll:

· 与上面创建静态链接库的方法类似,不同的是要首先创建一个新的Win32动态链接库工程(Win32 Dynamic-Link Library),然后按照上面所述步骤处理,最后编译得到osipparser2.dll。

2. 得到OISP的协议栈开发库(osip2.lib,osip2.dll):

· 同样按照上述方法,分别创建动态链接库工程和静态链接库工程,只是要拷贝的文件换成了源码包中src目录下的osip2文件夹下的文件和include目录下的osip2文件夹而已。

· 在编译osip2.dll的时候可能会出错,原因说是找不到链接库,所以将前面编译得到的osipparser2.lib文件也考到这个新建的动态链接库工程目录下,并在VC6中操作:Project->Setting->Link中的Object/Library Modules栏中,在kernel32.lib,user32.lib。。。之后加上osipparser2.lib,保存后再次编译,可成功编译osip2.dll。

至此,我们得到了完整的OSIP开发库,使用时,只需要在我们的程序中包含OSIP头文件,工程的链接参数中增加osip2.lib和osipparser2.lib即可。

(二).编译eXosip的静态链接库:(exosip.lib)
   由于oSIP是比较底层的SIP协议栈实现,新手较难上手,而官方的示例大都是一些伪代码,需要有实际的例子程序参考学习,而最好的例子就是同样官方发布的oSIP的扩展开发库exosip2,使用exoSIP可以很方便地快速创建一个完整的SIP程序(只针对性地适用于SIP终端开发用,所以我们这里只是用它快速开发一个SIP终端,用来更方便地学习oSIP,要想真正掌握SIP的开发,需要掌握oSIP并熟读RFC文档才行,exoSIP不是我们的最终学习目的),通过成功编译运行一个自己动手开发出的程序,再由浅入深应该是初学都最好的学习方法通过对使用exosip开发库的使用创建自己的SIP程序,熟悉后再一个函数一个函数地深入学习exosip提供的接口函数,就可以深入理解osip 了,达到间接学习oSIP的目的,同时也能从eXoSIP中学习到正确使用oSIP的良好的编程风格和语法格式。

· 和之前描述的方法基本一致,首先创建Win32静态链接库工程,然后将eXosip源码包中的src目录下的所有文件都考到新建的工程目录下,并且在VC6中加入这些文件。

· 将源码包中的inlude文件夹也整个考到新建的工程目录下。

· 按照上述方法,进行多线程编译的设置;

· 按照上述的方法,设置PSDK的使用;

· 编译得到exosip.lib。