背景
之前写过一篇关于sip协议栈选型的文章,最终采用了osip 2.3.6版本,文章中说明了为什么采用osip协议栈,以及为什么采用2.3.6版本。现在Linux上的产品已经基本满足需求了,接下来我们打算开发一套客户端和服务端对接,考虑到windows与Linux使用同一套源码,减低维护成本,所以在windows下我们依旧选择2.3.6版本,在编译的时候遇到一些坑,在此记录一下,方便自己和道友后续参考。
本次编译使用的硬件环境是windows10 + vs2017
编译
osip使用包含两个原码包,osip与eXosip,其中eXosip依赖于osip,所以我们先编译osip源码包,osip源码包包含两个库,分别是osip2和osipparser2。
osip编译
编译windows sdk version 选择8.1。如果选10.0编译失败,原因未知。
由于源代码与对于部分函数未导出,所以如果编译生成动态库,在编译libeXosip时会报错,需要我们手动补充几个未导出的函数。
osip2.def
文件尾添加
osip_transaction_set_naptr_record @138
osipparaser2.def
文件尾添加
osip_realloc @416
osip_strcasestr @417
__osip_uri_escape_userinfo @418
点击编译生成即可,完成osip编译。
eXosip编译
windows sdk 版本参考osip,依旧选在8.1。添加osip的头文件与生成库,去掉openssl的宏定义,添加4个系统依赖库“WSock32.Lib WS2_32.Lib DnsAPI.Lib IPHlpApi.Lib”,即可。
点击编译生成即可完成libeXosip库的编译。