Linux及Windows下编译exosip和osip2源码
eXosip库及编译流程简介
1、eXosip库的简介
1.1、osip简介
osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。但缺点也很明显,首先就是可用性差,没有很好的api封装,使得上层应用在调用协议栈时很破碎;其次,只做到了transaction层次的协议过程解析,缺少call、session、dialog等过程的解析,这也增加了使用的难度;再次,缺少线程并发处理的机制,使得它的处理能力有限。
1.2、eXosip简介
eXosip是osip2的一个扩展协议集,它部分封装了osip2协议栈,使得它更容易被使用。eXosip增加了call、dialog、registration、subscription等过程的解析,使得实用性更强。但是eXosip局限于UA的实现,使得它用于registrar、sip server等应用时极其不容易。另外,它并没有增加线程并发处理的机制。而且只实现了音频支持,缺少对视频和其它数据格式的支持。
2、eXosip的编译流程简介
2.1、概述
eXosip库适用于多种不同的操作系统,这里将以常见的Linux及windows操作系统为例进行编译流程的简介及注意事项。以下以eXosip的目前最新版本5.3.0、osip的5.1.2以及c-cares的1.18.1版本进行编译示例
编译eXosio库需要对osip2库及c-ares库(windows下编译需要)进行编译,以下附上所需库以下附上所需库的下载链接
eXosip下载链接:http://git.savannah.nongnu.org/cgit/exosip.git/refs/
osip2 下载链接:http://download.savannah.gnu.org/releases/osip/
c-ares下载链接:https://c-ares.haxx.se/
2.2、linux编译
2.2.1、编译流程
1、下载osip2的5.1.2版本源码包及eXosip的最新版本5.3.0的源码包
2、将下载好的源码包拷贝到对应的编译服务器
3、分别执行tar –zxvf +源码包名称,并分别重命名为eXosip及libosip
4、设置环境变量export path=${pwd},方便后续存放库文件及头文件
5、创建空的文件夹sip,mkdir sip,方便后续存放库文件及头文件
6、先编译osip库,cd libosip/
7、执行命令 sh autogen.sh用以生成configure文件
8、执行命令./configure --prefix=$path/sip CFLAGS="-g -O2 -pthread -fPIC -D_GNU_SOURCE" 用以生成makefile文件
9、执行成功后,执行最后一步:make && make install等待生成即可
10、osip库编译成功后会在上级目录的sip文件夹下生成对应的头文件及库文件,再来编译eXosip库,
11、eXosip库的编译流程同osip流程一致,全部执行成功即可在sip文件夹下查看对应文件
2.2.2、编译过程问题记录
2.2.2.1、编译源码时报错
1、在文件jcallback.c中找不到destroyed_time及created_time
解决:经过查看eXosip及osip源码发现,这两个结构体参数在osip5.1.2版本的源码中定义为completed_time及birth_time,故将此处定义修改为osip中对应的的结构体定义即可
2、找不到osip_timersub函数的声明
解决:经过对比eXosip4.0.0版本的源码发现,老版本的函数中并无对此函数的引用,如下图:
更换不同的osip版本后依然报错故将此处的osip_timersub引用暂时屏蔽处理
3、返回值“OSIP_RETRY_LIMIT”未定义
解决:通过比对可以发现老版本的返回值为OSIP_UNDEFINED_ERROR
故这里替换为老版本的宏定义的返回值后可解决此问题。
4、can’t read /sip/lib/libosipparser2.la: No such file or directory
解决:报错后实际查看对应的sip文件夹下是存在lib及include等文件的,但是链接时找不到,解决方法如下:清楚库文件及配置信息后重新配置生成即可
2.2.2.2、链接库文件时报错
1、could not read symbols: Bad value报错
解决:问题原因是编译eXosip库时没有加编译选项-fPIC,重新编译并且在执行configure脚本时添加编译选项CFLAGS="-g -O2 -pthread –fPIC“即可
2、undefined reference to `__isoc99_sscanf’报错
解决:需要在编译eXosip库时添加编译选项-D_GNU_SOURCE,重新编译并且在执行configure脚本时添加编译选项CFLAGS="-g -O2 -pthread -fPIC -D_GNU_SOURCE"即可
3、ssl相关函数报错undefined reference
解决:如果出现这种报错,说明在编译eXosip库时使用默认的configure生成的makefile,默认是打开openssl选项,故这里需要链接对应的openssl库文件,解决方式有如下两种:
(1)如果需要开启openssl可以在自己的工程中的Makefile中补充对应的openssl库文件及头文件即可,如下示例
(2)如果不需要openssl则在编译eXosip库时关闭openssl选项即可,命令如下
./configure --enable-openssl=no
4、找不到internal.h头文件
解决:osip库编译成功后internal.h头文件不会自动拷贝,但是在源码路径下可以查找到此文件,将源码下osip5.1.2版本的头文件参与编译会进行如下报错
经过比对发现,此处报错区别为,高版本将多行合并一行,并且此头文件中并无新增相关函数定义,处理方式为:暂且使用老版本的头文件,将新版本头文件新增内容进行合并即可。
2.3、windows编译
由于这里不需要使用Windows下的库文件,这里只进行编译流程及编译过程中所遇到问题和解决方法的简要概述。本地编译环境为vs2015
2.3.1、编译流程及问题
1、下载osip2的5.1.2版本源码包及eXosip的最新版本5.3.0的源码包和c-ares的1.18.1版本的源码包
2、将下载好的源码包放到新建文件夹同级别目录
3、分别解压三个源码包到各自目录下
4、重命名exosip-5.3.0为exosip、libosip2-5.1.2为osip
5、将osip文件夹拷贝到exosip的同级目录,并新建一个名为c-cares的空目录,目录结构如下图所示
6、复制 c-ares-1.18.1/src/lib下所有文件到 c-ares、复制 c-ares-1.18.1/src/tools 到 c-ares、复制 c-ares-1.18.1/include 到 c-ares目录结构如下图所示
7、将osip的sln的同级目录的两个工程文件osip2.vcxproj和osipparser2.vcxproj拷贝到exosip的sln同级目录,如图所示
8、进入exosip的源码工程下找到sln,并打开
9、修改编译相关选项,左上角修改为release和win32,各个工程右键打开属性->常规中:目前平台版本选择8.1、平台工具集选v140(这里是vs2015编译可以根据自己的ide进行适当选择即可)
10、在eXosip 和 libcares两个项目属性中选c/c++常规,在附加包含目录编辑添加新的引用目录:…\c-ares\include
11、在libcares项目中添加 c-ares/tools中的两个文件, 同时删除libcares项目中原有的这两个文件ares_getopt.c、ares_getopt.h
12、libcares.vcxproj下加入c-ares下五个文件ares_platform.h,、ares_platform.c、ares_create_query.c、ares_strsplit.c、ares_strsplit.h
13、在eXosip项目属性 选c/c++ 预处理器中的预处理器定义,去掉宏HAVE_OPENSSL_SSL_H,不然在编译的时候出现fatal error C1083: 无法打开包括文件: “openssl/opensslv.h”: No such file or directory
14、配置完成后一键重新生成,会出现在Linux下的相同代码报错,如下:
相同报错的解决方法同linux编译时的处理流程,除此之外
fatal error C1083: 无法打开包括文件: “nameser.h”: No such file or directory,这个报错需要将namerser.h改为ares_nameser.h即可,因为c-cares的头文件命名有所改变。
Linux及Windows下编译exosip和osip2源码相关推荐
- Windows下编译eXosip、osip,以及UAC和UAS的例子
今天开始了SIP开源库的学习,我选择了osip和eXosip,但是这两个库的编译使用有些麻烦,源码下来之后编译会出现很多问题,网上也没有找到完整的编译介绍,只能一步一步的找办法解决,最后终于编译成功! ...
- opencv4.0在linux下编译,Ubuntu 18.04源码编译安装OpenCV 4.0步骤
Ubuntu 18.04下标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 108 ...
- linux如何运行qt源码,Linux/Ubuntu下编译Qt4.8.2源码
本人所用的系统为Ubuntu 14,所下载的QT源码版本为4.8.2. 以下是编译QT源码的基本步骤: 2.解压代码 输入指令: tar zxvf qt-everywhere-opensource-s ...
- 【原创】Windows下使用 Eclipse 管理 RabbitMQ 源码之问题解决
2019独角兽企业重金招聘Python工程师标准>>> 使用 Eclipse + Erlide 来管理 Erlang 代码是一种常见方式.本文简要说明下,本人在 Windows 下管 ...
- 30-10-010-编译-IDEA下编译kafka 2.3源码
1.视界 2.瞎蒙的编译 https://blog.csdn.net/qq_21383435/article/details/90971614 编译跳过测试 gradle build -x test ...
- Windows下最轻量级Git克隆工具源码分享
简单的来说: 原理就是只要用户知道git地址和分支名,即可克隆项目到指定文件夹,省去了输命令行的时间,方便用户去操作 系统要求: Windows系统,然后本身环境要装有git git安装地址:http ...
- ubuntu下编译安卓7.0源码
ubuntu下使用国内镜像下载安卓7.0源码 本文使用的环境如下: 1.Ubuntu系统:ubuntu-18.04.5-desktop-amd64 2.repo:谷歌开发的方便拉安卓源码的工具 3.p ...
- 龙芯3a5000下编译redis 7.0源码
1.下载redis 7.0源码后解压缩备用 https://redis.io/download/ 2.下载最新版本的config.guess和config.sub redis 用到了jemalloc库 ...
- Mac下编译太阳神三国杀源码
Mac系统版本是10.13.2,Qt版本是5.11,参考官方博文:太阳神三国杀 Mac 版构建指南 安装Qt5 下载最新的Qt5安装包qt-opensource-mac-x64-5.11.0.dmg, ...
最新文章
- latex教程详细笔记
- JavaScript精简代码 非一般的写法(转载)
- 如何基于OceanBase构建应用和数据库的异地多活
- python编程内置函数使用方法_python编程(4)--内置函数
- Java序列化 - 分析不同序列化方式的优劣
- 百度一口气亮出NLP十年积累:完整技术布局全面披露,面向业界砸下11项七夕大礼
- (转)Math.Round() -- c# 与 java的区别
- 软件中的1、同步调用;2、回调;3、异步调用
- 操作系统下代码设计与走读方法—业务线索法
- java十进制转换成二进制数
- (转)android studio工程编译不出来的一些error
- springboot 访问远程服务器文件,springboot使用JSch远程读取sshd服务器上的文件
- linux环境文件或者文件夹打包
- phinx武林秘籍(上)
- 高性能网络编程(一)----accept建立连接
- Win10锁屏自动暂停音乐播放,解锁后恢复
- 华工简述微型计算机系统的组成,华工 计算机组成原理随堂.doc
- python xlsx 样式 谷歌开源 样式_python XlsxWriter模块创建aexcel表格
- kafka伪集群搭建
- Python 函数绘图及函数图像微分与积分
热门文章
- 游戏人工智能读书笔记--概述
- 《JavaScript权威指南第7版》第14章 元编程
- 单片机应用系统设计技术——12位AD_DS1621与12864液晶
- Java Iterator 详解
- Refit结合Polly访问ASP.NET Core Web API
- Burp suite工具使用及功能模块介绍
- IntelliJ IDEA 2018.2 激活教程 2019.1.3注册码 (亲测有效)
- 适合大学生兼职的副业有哪些?哪些兼职赚钱?
- 写python爬虫的第一天,拿百度练手遇到 “ 被反爬遇到<title>百度安全验证</title> ” 的解决方案
- 天空卫士监控行为显示叉_提示信息 判断题,请判断对错! 快捷键设置 元贝驾考 暂 停上一题下一题...