Linux及Windows下编译exosip和osip2源码

2023-11-17

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/
执行make相关配置包链接:http://mirrors.kernel.org/gnu/

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文件夹下查看对应文件


1、没有环境的系统配置需配置如下版本,其他版本可能不兼容导致执行sh autogen.sh或make时报错

automake:1.13.4
autoconf:2.69
libtool:2.4.2
m4:1.4.14

每个包进行如下安装。对于没有网络环境情况,需自行下载对应版本的包即可,链接见上

wget http://mirrors.kernel.org/gnu/automake/automake-1.11.tar.gz 
tar xzvf automake-1.11.tar.gz 
cd automake-1.11 
./configure --prefix=/usr
make
make install
cd ..

2、可借鉴编译选项

osip:./configure --prefix=$path/sip CFLAGS="-g -O2 -pthread -fPIC -D_GNU_SOURCE -fstack-protector-all -fstack-protector-strong"
exosip:./configure --prefix=$path/sip CFLAGS="-g -O2 -pthread -fPIC -D_GNU_SOURCE -DENABLE_MAIN_SOCKET -fstack-protector-all -fstack-protector-strong"  --enable-openssl=no

编译exosip时不加宏ENABLE_MAIN_SOCKET,会导致tcp主动注册时,国标设备离线

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的头文件命名有所改变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux及Windows下编译exosip和osip2源码 的相关文章

随机推荐

  • 我的学习体验是这样的,关于

    话说 完全没有想到 自己在知乎发布的第一篇文章 我在知乎学写作 竟然收获到还不错的互动 坦率地说 已经比我的微信公众号推文的效果好太多 我想 这主要是得益于大家对于知乎写作课本身的兴趣吧 到目前为止 虽然还没有修完知乎写作课的全部课程 但是
  • 浮点数在计算机中存储方式、十六进制(HEX)和浮点类型(float、double)转换

    目录 浮点数在计算机中存储方式 举例 8 25和120 5在内存中真正的存储方式 浮点类型转换为十六进制 方法1 用地址用指针 方法2 用共用体 方法3 使用memcpy 十六进制转换为浮点类型 浮点数在计算机中存储方式 https www
  • 多家支付机构停发代理商分润

    分润是POS代理推广的主要收入来源 一旦分润被掐断 意味着POS代理失去了赚钱的来源 近段时间以来 多家支付公司因停发POS代理分润在支付行业内引起了较大争议 涉及十几家支付公司 近日 多家支付公司代理商在公开投诉平台发帖投诉称 后台分润提
  • 详述Java中的异常

    我是目录 一 异常的解决方案 二 异常的基本用法 三 Java异常体系 四 自定义异常 五 面试阐述 所谓 异常 指的就是程序在 运行时 出现错误时通知调用者的一种机制 我们平时把 System out println 拼写错了 写成了 s
  • 第一章 pandas基础-练习题

    第一章 pandas基础 练习题 首先要导入对应的模块 import pandas as pd import numpy as np Ex1 口袋妖怪数据集 现有一份口袋妖怪的数据集 下面进行一些背景说明 代表全国图鉴编号 不同行存在相同数
  • QT基础(三)之添加资源文件及界面美化

    QT基础之添加资源文件及界面美化 QT可以做出非常炫酷的图形界面 通过添加一些资源文件可以对我们的界面进行美化 下面以添加图片资源 美化标签为例 对QT Creator添加资源文件进行学习 一 添加资源文件 1 给工程添加一个新的资源文件
  • C++之标准库(STL)容器List的用法

    文章目录 list说明 list定义 list使用 list赋值操作 list数据元素插入和删除操作 list数据存取 list大小操作 list反转排序 list访问 list说明 链表是一种物理存储单元上非连续 非顺序的存储结构 数据元
  • QtCreator 打不开UI文件

    最近遇到了ubuntu下的QtCreator打开ui 文件时 QT Creator 界面变黑色 程序崩溃 然后自动退出 这儿软件我用了1年了 莫名其妙出现了这个问题 很是费解 重装了QtCreator和QtDesigner 还是不行 在网上
  • Endnote 导入参考文献的时候,格式错误太多了。et.al错误,国标GBT7714在endnote中的详细配置教程,适用于本科,硕士论文文献插入的模板

    文章目录 一 Endnote文献GBT7714下载 0 起因与发展 1 1进行chinese GBT7714 2015的下载 二 Endnote格式配置及参数的设置 2 1 开始修改配置 重要配置详细分解 英文期刊 中文期刊 三 实战插入文
  • 用matlab进行拉普拉斯滤波,matlab拉普拉斯算子锐化滤波

    一 本文主要是在给出拉普拉斯锐化算子公式的情况下 在matlab上实现代码设计 拉普拉斯算子是最简单的各向同性微分算子 有几种常用的滤波模板 本文使用的是八邻域模板 如下所示 image png 其对应的计算公式为 image png 因此
  • 应用程序,操作系统,驱动程序的关系

    硬件和软件 计算机资源分为硬件资源和软件资源 硬件资源包括cpu 内存 显卡 网卡 声卡 硬盘等等 软件资源包括各种程序 每个硬件完成特定的功能 比如显卡完成在显示设备上显示图形 声卡实现声音的处理 再比如 你用qq发送一段文字给一个同学
  • VUE3使用JSON编辑器

    1 先看看效果图 可以自行选择展示效果 2 这是我在vue3项目中使用的JSON编辑器 首先引入第三方插件 npm install json editor vue3 yarn add json editor vue3 3 引入到项目中 导入
  • 强化学习实践二 :理解gym的建模思想

    David Silver的强化学习公开课有几个特点 个人感觉首要的一个特点是偏重于讲解理论 而且有时候为了讲清楚一个理论的来龙去脉 也顺带讲了很多不常用的理论 还有一个特点是小例子很多 这些例子有时候不仅是为了讲清楚一个复杂的算法 而且通过
  • [Redis] Redis 安装部署

    Redis Redis 安装部署 简介 Redis是一个开源的使用ANSI C语言编写 遵守BSD协议 支持网络 可基于内存亦可持久化的日志型 Key Value 数据库 并提供多种语言的API 它通常被称为数据结构服务器 因为值 valu
  • 查看Postgresql的连接状况

    今天遇到一个问题 就是pg一直报错 说有太多的客户端连接到数据库上面 但现在不知道是什么程序连接 pg默认的max connection是100 我并没有修改过 以为平时公司内部用 应该够了 但现在貌似这100个连接都被消耗掉 在网上goo
  • 【CSS】如何用css做一个爱心

    摘要 HTML的标签都比较简单 入门非常的迅速 但是CSS是一个需要我们深度挖掘的东西 里面的很多样式属性掌握几个常用的便可以实现很好看的效果 下面我便教大家如何用CSS做一个爱心 前期预备知识 明白正方形的画法 明白圆形的画法 明白什么是
  • Android下基于Http协议的网络摄像机开发

    这段时间在做Android平台下的网络摄像机的兼容 摄像机的通讯采用Http1 1协议 现将遇到的问题简单总结一下 1 Http协议中需要用到身份认证部分 不同厂家的摄像机所采取的方案可能有所不同 但是大体无外乎都是将摄像机的用户名和密码简
  • 江科大自化协STM32学习笔记(部分C语言知识、STM32简介和GPIO口的使用)

    本篇文章是根据B站UP主江科大自化协的教学视频STM32入门教程 2023持续更新中 在了解 学习与实操后整理的学习笔记 内容部分来自UP主的课程资料 并包含了一些个人的理解 如有谬误欢迎指正 详细知识点可以观看UP主的视频进行了解 希望大
  • php如何读取解析eml文件以及生成网页的示例分享

    这篇文章主要介绍了PHP读取 解析eml文件及生成网页的方法 结合实例形式分析了PHP操作eml文件的读取 解析 转换等相关实现技巧与注意事项 并附带demo源码供读者下载参考 需要的朋友可以参考下 本文实例讲述了PHP读取 解析eml文件
  • Linux及Windows下编译exosip和osip2源码

    eXosip库及编译流程简介 1 eXosip库的简介 1 1 osip简介 osip2是一个开放源代码的sip协议栈 是开源代码中不多使用C语言写的协议栈之一 它具有短小简洁的特点 专注于sip底层解析使得它的效率比较高 但缺点也很明显