1、获取 libeXosip2-4.1.0.tar.gz、 libosip2-4.1.0.tar.gz
下载地址为:http://www.antisip.com/download/exosip2/
2、获取c-ares-1.11.0.tar.gz
下载地址为:http://c-ares.haxx.se/
3、新建一个src目录
解压 libeXosip2-4.1.0.tar.gz、libosip2-4.1.0.tar.gz、c-ares-1.11.0.tar.gz得到libeXosip2-4.1.0、libosip2-4.1.0、c-ares-1.11.0文件夹,把libeXosip2-4.1.0、libosip2-4.1.0、c-ares-1.11.0分加改名得到eXosip、osip、c-ares三个文件夹。
4、打开解决方案
libosip2-4.1.0等默认的几个工程是VS2012的工程。
使用VS2015打开eXosip\platform\vsnet\eXosip.sln解决方案后,
会弹出[升级VC++编译器和库]的窗口。点击确定后,工程会自动升级到VS2015。
5、编译osip2:
<1>使用VS2015打开libosip2-4.1.0/platform/vsnet/osip.sln
<2>使用VS2015打开osip/platform/vsnet/osip.sln,会弹出[升级VC++编译器和库]的窗口。点击确定后,工程会自动升级到VS2015。
<3>选择《生成解决方案》进行一起编译生Debug(使用静态库)
<4>从v140/Win32/Debug文件夹中得到osip2.lib和osipparser2.lib库
<5>编译过程出现以下错误:
错误1:
error “fatal error C1189: #error: Macro definition of snprintfconflicts with Standard Library function declaration”
解决办法:
在osip2目录里打开port_condv.c 和 internal.h文件,注释掉defined(WIN32)下的 #define snprintf _snprintf
错误2:
error C2011: “timespec”:“struct”类型重定义
解决办法:
在项目属性-c/c++-预处理器-预处理器定义里增加宏 HAVE_STRUCT_TIMESPEC
警告1:
在WIN10系统中编译出现如下警告:
osip\include\osipparser2/internal.h(71):warning C4067: 预处理器指令后有意外标记 - 应输入换行符
osip\include\osip2/internal.h(163):warning C4067: 预处理器指令后有意外标记 - 应输入换行符
解决办法:
在internal.h文件中找到如下内容:
#if(_MSC_VER >= 1700) && !defined(_USING_V110_SDK71_)
#include<winapifamily.h>
#endif
在#include<winapifamily.h>后面增加宏定义如下
#defineWINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY &PartitionSet) == Partition)
6、编译eXosip2:
由于eXosip依赖于libcares、osip2、osipparser2这3个库。按上面的目录结构,工程不需要特别配置。
直接编译eXosip
在vsnet/v140/Win32/Debug下得到eXosip.lib、libcares.lib、osip2.lib、osipparser2.lib四个静态库。
7、编译过程出现以下错误:
错误1:
C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.
Targets(511,5): errorMSB8008:指定的平台工具集(v100)未安装或无效。请确保选择受支持的 PlatformToolset 值。
解决办法:
这个问题主要是在工程序转换的时候,c-ares项目默认为VS2012工程, 在c-ares项目点击右键-属性-配置属性-常规-平台工作集把V110改为V140。
错误2:
fatal error C1083: 无法打开包括文件: “nameser.h”: Nosuch file or directory
解决办法:
在项目属性-c/c++-预处理器-预处理器定义里去掉宏SRV_RECORD
错误3:
fatal error C1083: 无法打开包括文件: “tsc_socket_api.h”:No such file or directory
解决办法:
在项目属性-c/c++-预处理器-预处理器定义里去掉宏TSC_SUPPORT
错误4:
error “fatal error C1189: #error: Macro definition of snprintfconflicts with Standard Library function declaration”
解决办法:
在eXosip目录里打开eXosip2.h文件,注释掉defined(WIN32)下的 #define snprintf _snprintf
错误5:
error C2011: “timespec”:“struct”类型重定义
解决办法:
在项目属性-c/c++-预处理器-预处理器定义里增加宏 HAVE_STRUCT_TIMESPEC
参考:
http://blog.csdn.net/dgyanyong/article/details/50818101
http://blog.csdn.net/htbsoft0556/article/details/19540333
等等