说明:

网上有很多关于OSIP,EXOSIP编译的介绍,站在他们的肩上,结合自己学习开发的经验写成。所用开发环境是——Windows XP SP3+ VC++6.0。所使用的oSIP库是libosip2-3.1.0和libeXosip2-3.1.0。本文将依次对osipparser2、osip2、exosip2的编译方法进行介绍。

一、osipparser2的编译

1、 动态库

以osipparser2为工程名,创建空的动态库工程,File-> New-> Projects-> Win32 Dynamic-Link Library:Project Name 输入osipparser2,点击OK即可。

将libosip2-3.1.0/src/osipparser2文件夹下的文件全部复制到我们刚创建的工程的根目录下,并在VC++6.0下将所有的源文件和头文件都加入到工程内,Project-> Add To Project-> Files:在打开的对话框中选择全部*.c和*.h文件,点击OK即可。

将libosip2-3.1.0中的INCLUDE文件夹导入到创建的工程中,Tools-> Options-> Directories:新建-选择浏览-确定。

保存工程,编译,成功!你会在Debug文件夹中发现osipparser2.dll!

这样生成的.dll你会发现没有.lib文件。怎么才能同时生成.lib文件供以后开发用哪?我们要做的是将libosip2-3.1.0/platform/vsnet下osipparser2.def文件拷贝到工程目录下,同样添加到工程,保存编译,OK!这样Debug目录下就会有.lib,.dll,.exp文件了。

添加.def文件编译可能会有错误,原因是.def文件里导出的函数工程里没有实现,在.def文件里把不能导出的函数删除就可以了。

2、 静态库

以osipparser2为工程名,创建空的静态库工程,File-> New-> Projects-> Win32 Static Library:Project Name 输入osipparser2,点击OK即可。

导入libosip2-3.1.0/src/osipparser2文件夹下的所有源文件和头文件至工程。

导入libosip2-3.1.0中的INCLUDE文件夹。

保存工程,编译,成功!你会在Debug文件夹中发现osipparser2.lib!

二、osip2的编译

1、 动态库

基本方法同osipparser2,相似处不再赘述。

以osip2为工程名,创建空的动态库工程。

导入libosip2-3.1.0/src/osip2文件夹下的所有源文件和头文件至工程。

导入libosip2-3.1.0中的INCLUDE文件夹。

导入刚才编译成功的osipparser2.lib,Project-> Settings-> Link:Object/library modules填入 osipparser2.lib /NODEFAULTLIB:libcd.lib(避免Warning LNK4098)。

增加OSIP_MT宏,以启用线程库,Project-> Settings-> C/C++:Preprocessor definitions填入OSIP_MT。

选择run-time library为Debug Multithreaded DLL, Project-> Settings-> C/C++:Category选择Code Generation,在Use run-time library 中调整。

鉴于exosip2需要使用PSDK,exosip2又是基于osip2的,故这里提前用到PSDK。使用PSDK的原因是需要用到其中的库,升级系统的Platform SDK,VC++6.0能使用的最新SDK下载地址如下:http://www.microsoft.com/msdownl ... PSP2FULLInstall.htm(VC6的支持已经停止,这是VC6能使用的最新SDK)。

安装完毕之后,进行下面操作。

导入Microsoft Platform SDK的INCLUDE文件夹,移至最上。

导入Microsoft Platform SDK的LIB文件夹,Tools-> Options-> Directories:选择LIB FILES后,新建-选择浏览-确定,移至最上。

将libosip2-3.1.0/platform/vsnet下osip2.def文件拷贝到工程目录下,同样添加到工程。

保存工程,编译,成功!你会在Debug文件夹中发现osip2.dll和osip2.lib

2、 静态库

以osip2为工程名,创建空的静态库工程。

导入libosip2-3.1.0/src/osip2文件夹下的所有源文件和头文件至工程。

导入libosip2-3.1.0中的INCLUDE文件夹。

加入OSIP_MT宏,以启用线程库。

导入Microsoft Platform SDK的INCLUDE文件夹,移至最上。

导入Microsoft Platform SDK的LIB文件夹,移至最上。

保存工程,编译,成功!你会在Debug文件夹中发现osip2.lib!

三、exosip2的编译

1、 动态库

以exosip2为工程名,创建空的动态库工程。

导入libeXosip2-3.1.0/src文件夹下的所有源文件和头文件至工程。

加入OSIP_MT宏,以启用线程库。

选择run-time library为Debug Multithreaded DLL, Project-> Settings-> C/C++:Category选择Code Generation,在Use run-time library 中调整。

导入刚才编译成功的osipparser2.lib osip2.lib和 /NODEFAULTLIB: LIBCD.lib, /NODEFAULTLIB: LIBCMTD.lib。

导入WSock32.Lib IPHlpApi.Lib WS2_32.Lib(Microsoft Platform SDK的LIB文件夹中的文件)。

导入libosip2-3.1.0中的INCLUDE文件夹。

导入libeXosip2-3.1.0中的INCLUDE文件夹。

导入Microsoft Platform SDK的INCLUDE文件夹,移至最上。

同样添加libeXosip2-3.1.0/platform/vsnet下的eXosip2.def文件。

由于这个文件一些函数没能到处,鉴于以后开发的需要,我们在.def文件的后面加上如下代码,导出这些函数。

   eXosip_call_send_request

     eXosip_call_build_info

     eXosip_call_terminate

     eXosip_call_send_ack

     eXosip_call_build_ack

     eXosip_call_send_initial_invite

     eXosip_call_build_initial_invite

 

保存工程,编译,成功!你会在Debug文件夹中发现exosip2.dll和exosip2.lib

 

2、 静态库

以osip2为工程名,创建空的静态库工程。

导入libosip2-3.1.0/src/osip2文件夹下的所有源文件和头文件至工程。

导入libosip2-3.1.0中的INCLUDE文件夹。

加入OSIP_MT宏,以启用线程库。

选择run-time library为Debug Multithreaded, Project-> Settings-> C/C++:Category选择Code Generation,在Use run-time library 中调整。

导入Microsoft Platform SDK的INCLUDE文件夹,移至最上。

导入Microsoft Platform SDK的LIB文件夹,移至最上。

保存工程,编译,成功!你会在Debug文件夹中发现exosip2.lib!

四、oSIP平台搭建小结

这个平台的搭建花了我大约两周的时间(包括十一假期)。起初编译.DLL的时候没有产生.LIB文件,没有在意。等编译完成后,用一个简单的UAC测试时就出现了错误,编译,运行都没错误,但就是没有消息发出去。后来学习了DLL,和LIB的一些知识,才理解了他们的关系,最终平台搭建成功。                

每解决一个问题,每前进一步,内心都无比的兴奋。希望以上内容对学习sip的朋友有所帮助。