说明:
网上有很多关于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的朋友有所帮助。