找回密码
 注册

扫一扫,访问微社区

EDA365大咖直播--《EDA软件互转的疑难杂症 第二期》
查看: 57|回复: 1

SIP学习1:使用VC++2008编译libosip和libeXosip

[复制链接]

该用户从未签到

发表于 2020-2-14 11:56 | 显示全部楼层 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

前几天刚开始知道自己要弄SIP的东西,这里就当是我的学习日志吧,一点一点积累。

师兄初步给了我下述资料:

D:\TD-集群项目组

(1)libeXosip2-3.6.0.tar.gz

(2)libosip2-3.6.0.tar.gz

(3)RFC3261中文版.pdf

(4)delib

(5)demo-src

(1)和(2)资料分别可以从http://www.gnu.org/software/osip/http://savannah.nongnu.org/projects/exosip/下载

官方的简介:

oSIP is an LGPL implementation of SIP. It's stable, portable, flexible and compliant! -may be more-! It is used mostly with eXosip2 stack (GPL) which provides simpler API for User-Agent implementation.

大概意思就是oSIP是一个基础库,相对很底层。而eXosip是它的扩充库,可以提供更多的应用接口。使用这些库就可以用各种现成的sip函数来搭建自己要的流程。

(3)SIP RFC3261的中文协议

(4)师兄生成好的各种静态库和动态库,还有.exp文件;有些文件不知道其用途如何,存在部分疑问。

(5)是现成的UAC和UAS程序 http://citiy.5d6d.net/thread-5686-1-1.html

关于如何编译这两个库,除了师兄给的http://citiy.5d6d.net/thread-5686-1-1.html以外,还有一个比较多人看的是:http://wenku.baidu.com/view/2fa7f5020740be1e650e9aa2.html。这两个我都走了一遍,个人倾向于前者,感觉比较专业和规范,也比较简洁(后者的dll和lib需要自己复制文件,还要独立分别生成出来)。前者再结合http://blog.csdn.net/yang_rong_yong/article/details/3551126即可。

Step1:打开libosip2-3.6.0\platform\vsnet\osip.sln,直接就能生成osip2.lib、osipparser2.lib、osip2.dll和osipparser2.dll

Step2:打开libeXosip2-3.6.1\platform\vsnet\eXosip.sln,直接生成会发现显示无法打开包括文件:osip2/....h和osipparser2/....h,说明找不到osip2和osipparser2目录下的各种头文件,看了下include里面果然没有这两个文件夹。然后把libosip2-3.6.0文件夹中include里面的这两个文件夹拷贝过去,或者在属性/C/C++/常规/附加包含目录,把osip2和osipparser2两个头文件文件夹的根目录加进去。

Step3:然后发现还是缺少openssl/....h的各种头文件,原因貌似是因为没有安装openssl,为网络通信提供安全及数据完整性的一种安全协议。这里我暂时不需要安装,所以到工程属性/C/C++/预处理器/预处理定义,将HAVE_OPENSSL_SSL_H宏定义去掉。(师兄所给的库函数里面有ssleay32.lib libeay32.lib,他们是openssl编译形成的静态链接库,可以从网上下载,或者自己编译,我这里暂时用不上)
Step4:宏定义去掉后,现在任存在下述问题, error C2065: “retval”: 未声明的标识符和warning C4018: “>”: 有符号/无符号不匹配;
前者:查了一下其代码为:retval = setsockopt(udp_socket, IPPROTO_IPV6, IP_TOS,
) a2 b3 Z3 j# a: B8 X' Q   (SOCKET_OPTION_VALUE)&tos, sizeof(tos));那就查一下看看setsockopt的返回值是什么,百度百科一下:“若无错误发生,setsockopt()返回0。否则的话,返回SOCKET_ERROR错误”返回就是一个int/bool类型的数或者宏。在代码中添加“int retval;”声明解决。其实retval本身可以去掉,只是一个查看setsockopt运行是否成功的标示而已。
后者:双击出错信息,VC++会自动进行规范转化,解决。
上述过程之后得到eXosip.lib,
Step5:我们还需要得到eXosip.dll,属性/常规,配置类型改为.dll,生成发现fatal error LNK1120: 216 个无法解析的外部命令。说明函数编译没有问题,但是在链接的时候找不到描述函数工作的obj代码,说明是lib的问题。属性/链接器/常规和输出中分别设置附加目录和目录下要添加的osip2.lib和osipparser2.lib(因为eXosip是在osip基础上的库,需要前面所生成的两个lib文件)。之后生成时在链接中发现依然有 : fatal error LNK1120: 46 个无法解析的外部命令。加入系统函数库Ws2_32.lib、Iphlpapi.lib、Dnsapi.lib之后:

0 ]1 L/ c& s) k
目前就进行到这里,我把问题在百度知道和师兄那边都进行了询问,等到有消息的时候再来更新吧。
* P' ]  c$ f+ M8 B4 I& ?

该用户从未签到

发表于 2020-2-14 19:20 | 显示全部楼层
使用VC++2008编译libosip和libeXosip
您需要登录后才可以回帖 登录 | 注册

本版积分规则

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号 )

GMT+8, 2020-2-17 04:05 , Processed in 0.062500 second(s), 19 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19925233282

快速回复 返回顶部 返回列表