系统配置: windows,vs2010
windows下编译方法:
版本:libeXosip2-4.1.0,官方下载地址:http://download.savannah.gnu.org/releases/exosip/
1.下载libeXosip2-4.1.0.tar.gz
1.1 打开libeXosip2-4.1.0\libeXosip2-4.1.0\platform\vsnet,eXosip.sln要用vs2012才能打开,由于用的是vs2010,所以我们用vs2010打开eXosip.vcxproj.编译
1.2 编译用出现以下错误:
错误1:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5):
error MSB8008: 指定的平台工具集(v100)未安装或无效。请确保选择受支持的 PlatformToolset 值。
解决方法:右键点击所建立的项目,选择属性,再点击配置属性中的常规,常规中有个平台工作集,把V110改成V100,点击应用即可。
错误2:
1> eXcall_api.c
1>c1 : fatal error C1083: 无法打开源文件:“..\..\..\exosip\src\eXcall_api.c”: No such file or directory
1> eXconf.c
1>c1 : fatal error C1083: 无法打开源文件:“..\..\..\exosip\src\eXconf.c”: No such file or directory
解决方法:关闭vs2010,将libeXosip2-4.1.0改为exosip。
错误3:
fatal error C1083: 无法打开包括文件:“osip2/osip.h”: No such file or directory
解决方法:下载libosip2-4.1.0.tar.gz源码,下载地址:http://ftp.gnu.org/gnu/osip/
解压libosip2-4.1.0.tar.gz,将libosip2-4.1.0改名为osip,拷贝到libeXosip2-4.1.0目录下,在编译
错误4:
1>f:\测试demo\exosip\libexosip2-4.1.0\exosip\src\eXtransport.h(44): fatal error C1083: 无法打开包括文
件:“openssl/opensslv.h”: No such file or directory
1> eXconf.c
1>f:\测试demo\exosip\libexosip2-4.1.0\exosip\src\eXtransport.h(44): fatal error C1083: 无法打开包括文
件:“openssl/opensslv.h”: No such file or directory
1> eXinsubscription_api.c
解决方法:右击eXosip选择属性->配置属性->c/c++->预处理器,删除 HAVE_OPENSSL_SSL_H
错误5:
1>..\..\..\exosip\src\eXtl_udp.c(55): fatal error C1083: 无法打开包括文件:“tsc_socket_api.h”: No such file or directory
1> eXtransport.c
1> eXutils.c
1>..\..\..\exosip\src\eXutils.c(93): fatal error C1083: 无法打开包括文件:“tsc_socket_api.h”: No such file or directory
解决方法:右击eXosip选择属性->配置属性->c/c++->预处理器,删除 TSC_SUPPORT
错误6:
1>..\..\..\exosip\src\eXutils.c(959): fatal error C1083: 无法打开包括文件:“nameser.h”: No such file or directory
解决方法:右击eXosip选择属性->配置属性->c/c++->预处理器,删除 SRV_RECORD
错误7:
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: 指定的平台工 具集(v110)未 安装或无效。请确保选择受支持的 PlatformToolset 值。
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: 指定的平台工 具集(v110)未 安装或无效。请确保选择受支持的 PlatformToolset 值。
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: 指定的平台工 具集(v110)未 安装或无效。请确保选择受支持的 PlatformToolset 值。
用vs2010打开libeXosip2-4.1.0\exosip\platform\vsnet下的libcares.vcxproj,修改平台工作集为V100
用vs2010打开libeXosip2-4.1.0\osip\platform\vsnet下的osip2.vcxproj,修改平台工作集为V100
用vs2010打开libeXosip2-4.1.0\osip\platform\vsnet下的osipparser2.vcxproj,修改平台工作集为V100
2. 编译libosip2-4.1.0下的osip2,osipparser2库
遇到问题和上面的差不多,可做相同的修改,基本上都是平台工作集改为V100。
3.编写个简单的Demo测试程序
1.将exosip下的头文件和osip下的头文件拷贝到一个文件下(include):
2.将exsip库和osip库拷贝到一个文件下(lib):
3.创建demo(如何在vs2010下创建项目就不讲了,自己看吧!记得在添加ws2_32.lib库)
代码如下:
#include <iostream>
#include "eXosip2/eXosip.h"
#include "osip2/osip_mt.h"
#include <winsock2.h>
using namespace std;
void* WorkThread(void *arg);
void main()
{
eXosip_t *lpeXosip=eXosip_malloc();
if(eXosip_init(lpeXosip)!= OSIP_SUCCESS)
return;
if(eXosip_listen_addr(lpeXosip,IPPROTO_UDP, "192.168.0.74", 5080, AF_INET, 0)!=OSIP_SUCCESS)
return;
osip_thread *lpThread=NULL;
lpThread=osip_thread_create(20000,&WorkThread,lpeXosip);
if(lpThread==NULL)
return;
cout<<"press any key,exit..."<<endl;
getchar();
if(OSIP_SUCCESS==osip_thread_join(lpThread))
return;
eXosip_quit(lpeXosip);
return;
}
void* WorkThread(void *arg)
{
eXosip_t *lpSipInstance=(eXosip_t*)arg;
if(lpSipInstance==NULL)
return NULL;
eXosip_event_t *lpEnvent = NULL;
for(;;)
{
lpEnvent = eXosip_event_wait(lpSipInstance,0,50);
eXosip_default_action(lpSipInstance,lpEnvent);
if (lpEnvent == NULL)
continue;
switch (lpEnvent->type)
{
case EXOSIP_MESSAGE_NEW:
{
if(MSG_IS_REGISTER(lpEnvent->request))
{
eXosip_lock(lpSipInstance);
osip_message_t *answer = NULL;
eXosip_message_build_answer (lpSipInstance,lpEnvent->tid, 200,&answer);
eXosip_message_send_answer (lpSipInstance,lpEnvent->tid, 200,answer);
eXosip_unlock(lpSipInstance);
}
if (MSG_IS_MESSAGE (lpEnvent->request))
eXosip_event_free(lpEnvent);
}
break;
case EXOSIP_REGISTRATION_SUCCESS:
break;
default:
break;
}
}
return NULL;
}