编译sip库依赖

目录

  • 目录
  • 编译信息
  • 说明
  • 问题及现象
  • 解决方法

编译信息

作者:xzf

创建时间:2022/7/7

更新时间:2022/8/8

说明

在window系统上编译sip,win10家庭版验证通过

版本说明:

  • c-ares:1.16.1(版本不能太高,不然文件结构变化不能一件生成)
  • libexosip2-5.3.0
  • libosip2-5.3.0

编译

1.下载库源码

1.下载osip https://www.antisip.com/download/exosip2/libosip2-5.3.0.tar.gz
2.下载exosip https://www.antisip.com/download/exosip2/libexosip2-5.3.0.tar.gz
3.下载c-ares https://c-ares.haxx.se/
根据上述说明下载对应版本。

2.解压文件

将下载好的文件解压到同一目录下

--cares
--exosip
--osip

3.编译

1.打开exosip/platform/vsnet/eXosip.sln

2.选择eXosip打开项目属性,c/c++ 预处理器 删掉 HAVE_OPENSSL_SSL_H,(需要安装openssl,不然会报错)。

3.点击生成即可。

eXosip.sln同目录下的V142会生成对应平台的静态库。

4.参考

https://blog.csdn.net/qq_37120714/article/details/105849862

动态库编译

前期和编译静态库一样,但是不生成静态库。

1.加入def

直接改成生成动态库,不会生成lib和dll,只会生成dll,故需要在项目属性里加入相关的def.

具体操作:

打开osippaerser2项目属性》配置属性》链接器》输入》模块定义文件:osipparser2.def(具体文件路径在osip/platform/vsnet/osipparser2,即osip.sln同目录下)。

osip2 同样操作。osip2.def

exosip2 同样操作。exosip2.def

点击生成即可。

PS:在exsip生成《目标文件名》最好改成exsip2,不然会生成exosip.libexosip.dll。而不是exosip2.libexosip2.dll

2.生成报错处理

情况一

错误    LNK2001    无法解析的外部符号 eXosip_automatic_refres
错误    LNK2001    无法解析的外部符号 eXosip_enable_ipv6
错误    LNK2001    无法解析的外部符号 eXosip_refer_build_request
错误  LNK2001 无法解析的外部符号 eXosip_refer_send_request
错误  LNK2001 无法解析的外部符号eXosip_subscribe_build_initial_request
错误  LNK2001 无法解析的外部符号 eXosip_subscribe_build_refresh_request
错误  LNK2001 无法解析的外部符号eXosip_subscribe_send_initial_request
错误  LNK2001 无法解析的外部符号 eXosip_subscribe_send_refresh_request

这是由于版本的不同,5.3.0已经不适用这些函数,5.0后eXosip_subscription_build_initial_request已经替代了eXosip_subscribe_build_initial_request

exosip2.def删掉相关函数即可。

点击重新生成即可。

情况二

错误    LNK2019    无法解析的外部符号 _DnsQueryConfig@24,函数 _eXosip_dnsutils_naptr 中引用了该符号    eXosip        

加入Dnsapi.lib库重新编译即可。

情况三

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2019    无法解析的外部符号 _ares_create_query,
错误    LNK2019    无法解析的外部符号 _ares_strsplit_free,
错误    LNK2019    无法解析的外部符号 _ares_strsplit,
错误    LNK2019    无法解析的外部符号 _ares__getplatform,

在libcares项目加入相关缺少文件。

即(ares_create_query.c、ares_strsplit.h、ares_strsplit.c、ares_platform.h、ares_platform.c)注意.在libcares.1.16.1版本,加入的文件是 ares_platform.h、ares_platform.c,更早些版本是ares_getplatform.h、ares_getplatform.c

情况四

错误    LNK2001    无法解析的外部符号
_osip_compensatetime
_osip_getsystemtime        
_osip_transaction_get_reserved1            
_osip_transaction_get_reserved2              
_osip_transaction_get_reserved3              
_osip_transaction_get_reserved4              
_osip_transaction_get_reserved5           
_osip_transaction_set_naptr_record           
_osip_transaction_set_reserved1             
_osip_transaction_set_reserved2             
_osip_transaction_set_reserved3             
_osip_transaction_set_reserved4             
_osip_transaction_set_reserved5             
...

看到类似的基本是由于没有相关接口引出来,需要修改osip2.def即可。

或者osipparser2.def,以下是osipparser2.def

_osip_list_clone                             
_osip_message_replace_header                
_osip_strcasestr                            
__osip_free                                 
__osip_malloc                               
__osip_realloc                              
___osip_uri_escape_userinfo                  
...

点击重新生成即可。遇到类似的情况同理即可。

修改方式

 # @数字是根据上一个数字的增加1
 # 减少_,函数坑你是_或者__或者___开头,
 _osip_compensatetime 对应 osip_compensatetime @数字

情况五

错误    LNK2001    无法解析的外部符号 __imp__accept@12    
错误    LNK2001    无法解析的外部符号 __imp__bind@12    

看到这种类似的,直接上ws2_32.lib即可。

3.调用时报错

调用某些可能会报错,这时候是因为exsip2相关接口没有暴露出来。修改exosip.def重新编译即可。

eXosip_malloc
eXosip_subscription_build_initial_subscribe
eXosip_subscription_send_initial_request
eXosip_call_build_initial_invite
eXosip_call_send_initial_invite
eXosip_call_terminate
eXosip_call_build_ack
eXosip_call_send_ack
tag(s): 编译
show comments · back · home
Edit with Markdown