arm for asterisk1.8

./configure --host=arm-linux后报错,找不到termcap,于是下载了termcap-1.3.1进行交叉编译。

再次./configure --host=arm-linux后依然报错,找不到libxml2,于是下载了libxml2-2.7.2进行交叉编译。

再次./configure --host=arm-linux后成功通过。


然后,make报错,unknow value ' ' found in build_tools/menuselect-deps for NATIVE_ARCH

打算交叉编译一下ncurses试试。

交叉编译ncurses后,依然报错。

因为是menuselect报的错,那么就将menuselect交叉编译,menuselect在交叉编译时,报错,找不到libmxml.a,

然后发现menuselect下有mxml目录,那么就再把mxml交叉编译,编译虽然报错,但可以生成libmxml.a,再去

编译menuselect,这时报 找不倒gtk-xll-2.0,网上查了查,交叉编译gtk比较复杂,打算换个思路,看看能不能不用

menuselect



2014年3月5日,昨天,asterisk1.8非常神奇的用arm的天嵌210的交叉工具链编译过去了,现在把他放到一个AM3352的板子上去跑,运行asterisk的脚本执行直接报错退出了,发现是lsb的问题,asterisk是一个后台守护进程的方式运行的,而且是按照lsb的规范的,我的板子上没有这个东西。不过没关系,不用管他,直接运行asterisk的主程序也可以。运行asterisk主程序后,什么输出都没有,用ps aux | grep 'asterisk'也没有发现其在后天运行,一定是崩溃退出了。将asterisk主程序的代码都屏蔽掉后(main/asterisk.c),只打印一个输出,还是不行。查看asterisk的make输出,看到这一句。

gcc  -o asterisk -Wl,--export-dynamic -Wl,--version-script,asterisk.exports -Wl,--dynamic-list,asterisk.dynamics     abstract_jb.o acl.o adsi.o alaw.o aoc.o app.o ast_expr2.o ast_expr2f.o asterisk.o astfd.o astmm.o astobj2.o audiohook.o autochan.o autoservice.o bridging.o callerid.o ccss.o cdr.o cel.o channel.o chanvars.o cli.o config.o data.o datastore.o db.o devicestate.o dial.o dns.o dnsmgr.o dsp.o enum.o event.o features.o file.o fixedjitterbuf.o frame.o framehook.o fskmodem.o global_datastores.o hashtab.o heap.o http.o image.o indications.o io.o jitterbuf.o loader.o lock.o logger.o manager.o md5.o netsock.o netsock2.o pbx.o plc.o poll.o privacy.o rtp_engine.o say.o sched.o security_events.o sha1.o slinfactory.o srv.o ssl.o stdtime/localtime.o strcompat.o strings.o stun.o syslog.o taskprocessor.o tcptls.o tdd.o term.o test.o threadstorage.o timing.o translate.o udptl.o ulaw.o utils.o version.o xml.o xmldoc.o editline/libedit.a db1-ast/libdb1.a  buildinfo.o -lssl -lcrypto -lc  -lxml2  -ldl -lpthread -ltermcap  -lm -lresolv 


最后面这几句:-lssl -lcrypto -lc  -lxml2  -ldl -lpthread -ltermcap  -lm -lresolv

是asterisk需要依赖的库,其中只有termcap和xml2是我交叉编译后放入交叉工具链的lib路径下的,其他的都是交叉工具链自带的库。我估计是哪个库出的问题,挨个屏蔽,最后发现是xml2这个库的问题,根据asterisk的手册,他需要依赖libxml2-dev这个库,但是我已经移植了这个库。无耐之下,想了一个办法,我的开发板的rootfs用的是buildroot,用make menuconfig查看了buildroot,里面有libxml2,选中这一项,然后保存退出编译。因为buildroot会自动的下载选中的库并编译。编译完后,将里面的libxml2的动态库和静态库,弄出来,就可以用的。经测试发现asterisk没法用静态的libxml2,编译不过去,可以用动态的。


现在asterisk能跑起来了,但是还是自动退出了。在asterisk.c文件里,添加一个打印信息,发现到这一行就没有打印信息了。

if (daemon(1, 0) < 0)

daemon是linux守护进程的函数,第个参数如果为0的话,就把所有输出都输出到/dev/null里,所以这句后就没有输出了,将其改为1,现在asterisk输出如下

Waring: program compiled against libxml 209 using older 208

Unable to open AMI configuration manager.conf, or configuration is invalid..

Can't find indications config file indications.conf

Could not load features.conf

Could not find valid ccss.conf file. Using cc_max_requests default

183 modules will be loaded.

先看第一行,这是因为编译的时候我用的2.9.1版本的libxml2的头文件,而链接的时候,我用的是2.8.0版本的libxml2库文件,所以不匹配造成的。将上位机的/usr/include/libxml2/libxml里的头文件全部换成2.8.0的,再编译即可。

下面那些打印信息不用管,是正常的输出,但是到模块加载这里就没了,应该是asterisk崩溃了,查找代码后发现就是在加载模块的时候崩溃的。

asterisk的所有模块都是使用so文件提供的,而且是以dlopen的方式加载的,程序就是dlopen的时候崩溃的。

经测试发现是交叉工具链的事,因为我用的是天嵌的210交叉工具链,但是目标版是安之谋的335x,他们的交叉工具链版本是不一致的。因为我自己写了dlopen的测试程序,用天嵌的编译也崩溃,但是335x编译就没事了。

那么我只能用安之谋的工具链来编译了。

但是在编译的时候报错。以下是报错信息。

The 'CRYPTO' dependency was previously satisfied but is now unsatisfied.

The functionality of the following modules will be affected:

chan_iax2

func_aes

实际是在真正开始编译前就报错,从字面意思来看就是configure的时候有crypto,但在编译的时候交叉工具链实际没有这个库。所以报的错。经对比两个makeopts文件,就可以看到。

用./configure --host=天嵌交叉工具链前缀       ./configure --host=安之谋交叉工具链前缀

分别生成makeopts文件,就可以看出其中的差别。

可以将天嵌交叉工具链生成的makeopts替换安之谋生成的makeopts。

今天编译的时候,还是保错,是找不到SDL的头文件,发现是安之谋的交叉工具链里没有SDL的支持。

http://www.libsdl.org/release/

可以从这里下载sdl的源码来交叉编译。也可以用buildroot来下载并自动编译。buildroot自动下载的是

SDL-1.2.15.tar.gz

我是用buildroot来自动下载和编译的SDL,那么只需要将头文件和编译好的库文件都考入到交叉工具链相应的位置上即可。

现在终于编译过去了,将其拷贝到开发板上去运行,asterisk终于跑起来了。

用asterisk -r也可以连接上asterisk后台运行的daemon进程了。

但是用module show命令发现最关键的chan_sip.so模块没有加载,搜索后发现这个模块就没有被编译出来,经过对比上位机的文件后发现,这个文件menuselect.makeopts是不一致的。

这个文件的作用是指示不需要的模块,为什么这么说呢。

---------------------------------------------------------------------------------------------------------------------------------------------

这个地方是asterisk编译的精髓所在。

通过查看asterisk模块子目录的Makefile文件,可以发现每个Makefile里都包含了menuselect.makeopts,menuselect.makedeps,Makefile.moddir_rules文件。并且Makefile.moddir_rules里包含了Makefile.rules。

而且里面有这么一句all: _all。

但是查找整个Makefile文件,都找不到目标all的依赖_all,那么他一定是在某一个被包含的文件之中(上面4个文件之一)。

查找上面4个文件后,在Makefile.moddir_rules这个文件里发现了这一句。

_all: $(LOADABLE_MODS:%=%.so)

再查找LOADABLE_MODS,LOADABLE_MODS:=$(C_MODS) $(CC_MODS)

C_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_C_MODS))
CC_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_CC_MODS))

看到这几句,文件基本一目了然了,C_MODS和CC_MODS我们要编译的模块。

我猜测ALL_C_MODS和ALL_CC_MODS应该是asterisk的所有模块,然后通过makefile的filter-out函数将$(MENUSELECT_$(MENUSELECT_CATEGORY)这些模块过滤掉。那么$(MENUSELECT_$(MENUSELECT_CATEGORY)是在哪里定义的呢,我猜测应该是menuselect.makeopts果然,通过对比x86上的这个文件,发现我的menuselect.makeopts这个文件里MENUSELECT_CHANNELS这个模块里,确实是有chan_sip这个模块,证实我之前的猜测。

然后再说Makefile.rules这个文件。

asterisk真正启编译作用的文件是Makefile.rules这个文件,这个文件实际就是asterisk的通用编译规则文件。

这样上面4个文件总结如下:

1.Makefile.rules                          asterisk模块makefile文件的通用编译规则。

2.Makefile.moddir_rules              asterisk模块makefile文件的编译目标文件。

3.menuselect.makeopts              asterisk模块makefile文件不编译的模块指示。

4.menuselect.makedeps             ?????????

---------------------------------------------------------------------------------------------------------------------------------------------

接着上面的问题说,将menuselect.makeopts里面chan_sip和chan_alsa去掉后,再编译,就可以编译这两个模块了。

但是编译报错。是需要依赖库造成了,所以应该是在configure阶段,configure发现我没有这些库,所以生成的menuselect.makeopts里将chan_sip给去掉了,因为asterisk实际支持多种协议,所以sip不是必须的 ,但是对我来说

sip是最重要的。

昨天编译的时候报错,是少alsa,今天再编译居然编译过去了,很奇怪,将编译出的chan_sip和chan_alsa这两个库拷贝到开发版上。重启asterisk,sip模块加载上了。用xlite测试了一下,注册,拨号,音视频都没问题了。

                                                                                                                                                                  3月13号


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python可以实现操作系统管理_Python并发编程 —— 操作系统基础

1、手工操作 —— 穿孔卡片1946年第一台计算机诞生--20世纪50年代中期&#xff0c;计算机工作还在采用手工操作方式。此时还没有操作系统的概念。特点&#xff1a;(1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象&#xff0c;但资源的利用率低。(2)CPU 等待手工操…

oracle经纬度换算成xy坐标,谁有全套经纬度转换成XY坐标的好的软件?

用的实施么地图&#xff1f;标准地形图吗&#xff1f;如果是标准地形图&#xff0c;还是有办法转化的&#xff0c;因为用的是高斯-克吕格投影该投影按照投影带中央子午线投影为直线且长度不变和赤道投影为直线的条件&#xff0c;确定函数的形式&#xff0c;从而得到高斯一克吕格…

数学术语的英汉对照(权威,全面)

abbreviation 简写符号&#xff1b;简写 abscissa 横坐标 absolute complement 绝对补集 absolute error 绝对误差 absolute inequality 绝不等式 absolute maximum 绝对极大值 absolute minimum 绝对极小值 absolute monotonic 绝对单调 absolute value 绝对值 accelerate 加速…

交叉编译ncurses5.6

./configure --hostarm-linux -with-shared -without-debug make

粒子群 多目标 matlab_matlab 粒子群求解三角形垂心位置

续 https://www.toutiao.com/i6766960319995576843/设定三角形A顶点的坐标为 (x1,y1);(x2,y2);(x3,y3);随机初始化&#xff1b;计算得知垂心到三个顶点距离为&#xff1a;R(((x1^2 - 2*x1*x2 x2^2 y1^2 - 2*y1*y2 y2^2)*(x1^2 - 2*x1*x3 x3^2 y1^2 - 2*y1*y3 y3^2)*(x2^2…

php hasmany,浅谈laravel orm 中的一对多关系 hasMany

个人对于laravel orm 中对于一对多关系的理解文章表 article&#xff0c;文章自然可以评论&#xff0c;表 comment 记录文章的评论&#xff0c;文章和评论的关系就是一对多&#xff0c;一篇文章可以有多个评论。 在 comment 表中有字段 article 记录评论所属文章&#xff0c;文…

C类型转换

当执行算术运算时&#xff0c;如果类型不同都会发生类型转换 1、如果整形转换为signed不丢失数据&#xff0c;就转换为signed.否则需要转换为unsigned 如: 一类型为signed int,另一类型为unsigned short,因为signed可以容纳unsigned short的全部值&#xff0c;所以unsigned sho…

python多级字典_Python多层字典取值

#! /usr/bin/python# coding:utf-8"""author:Bingo.hefile: get_target_value.pytime: 2017/12/22"""def get_target_value(key, dic, tmp_list):""":param key: 目标key值:param dic: JSON数据:param tmp_list: 用于存储获取的数…

CSerialPort类定义的消息

CSerialPort类定义的消息 消息名称消息号功能说明WM_COMM_BREAK_DETECTEDWM_USER1检测到输入中断WM_COMM_CTS_DETECTEDWM_USER2检测到CTS&#xff08;清除发送&#xff09;信号状态改变WM_COMM_DSR_DETECTEDWM_USER3检测到DSR&#xff08;数据设置准备就绪&#xff09;信号状态…

【转】Windows Server2008 R2下安装Oracle 10g

因开发环境需要&#xff0c;在Windows Server 2008 R2 Enterprise64位系统上安装Oracle 10g。去Oracle 官方网站下载了Oracle Database 10g Release 2 (10.2.0.4) for Microsoft Windows Vista x64, Microsoft Windows Server 2008 R2 x64, Windows 7 x64。 可刚执行安装&am…

移植libmxml到(arm-linux)

官方网站 http://www.minixml.org/ 下载源码&#xff1a;mxml-2.6.tar.gz 解压缩&#xff1a; tar -zxvf mxml-2.6.tar 进入目录mxml-2.6后配置属性 ./configure --enable-shared --hostarm-linux make 编译后会出现一个小错误。不用理会&#xff0c;因为目前编译是在A…

mysqlworkbench导入sql文件_将sql脚本文件导入数据库

一、用cmd的调试环境导入.sql文件中的数据&#xff1a;WinR键打开cmd输入&#xff1a;MySQL -u root -p 输入密码&#xff1a;*******进入MySQL后MySQL>show databases; --查看所有数据库MySQL>create database mydatabase&#xff1b; --创建数据库 MySQL>use mydata…

linux创建目录的语句,Linux的 文件 和 目录 管理(基本语句)

包括了文件和目录的创建、删除、修改&#xff0c;权限、压缩、搜索、分区、挂载简单的一些命令&#xff1a;【 pwd 】查看当前所在目录【 cd .. 】上级目录【 cd ~ 】当前用户的家目录【cd -】上次打开目录(回看)【 rmdir 目录名】删除空目录【du -sh 文件或目录】查看文件或目…

win8开发中需要用到一些系统版本之类的统计信息,总结如下。

1.获取软件的版本号&#xff0c;这个比较简单: Package package Package.Current; PackageId packageId package.Id; PackageVersion version packageId.Version; string version String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build…

sql怎么读_大白话讲解脏写、脏读、不可重复读和幻读

一般对于我们的业务系统去访问数据库而言&#xff0c;它往往是多个线程并发执行多个事务的&#xff0c;对于数据库而言&#xff0c;它会有多个事务同时执行&#xff0c;可能这多个事务还会同时更新和查询同一条数据&#xff0c;所以这里会有一些问题需要数据库来解决我们来看看…

Linux显示txt文件,如何在Linux中显示文本文件中的某些行?

sed -n 10000000,10000020p filename你可能能够加快这一点&#xff1a;sed -n 10000000,10000020p; 10000021q filename在这些命令中,选项-n使sed“抑制模式空间的自动打印”. p命令“print [s]当前模式空间”和q命令“立即退出[s] sed脚本而不再处理任何输入……”引号来自sed…

Android上试用Linphone(Free SIP VOIP Client)

1. 下载Linphone apk并且安装到两个Android手机上http://www.linphone.org/eng/download/packages/android.html2. 申请两个免费的SIP帐号进行测试https://www.ekiga.net/3. 在每个Android手机上分别配置Linphone应用程序点击Settings菜单, 在SIP Account界面分别配置如下:User…

greensock包使用

greensock包使用 官网&#xff1a; http://www.greensock.com/tweenlite/ 新的遮罩类&#xff1a;BlitMask类 http://www.snorkl.tv/2011/10/use-blitmasks-wrap-feature-for-easy-bitmap-scrolling-and-looping/ 转载于:https://www.cnblogs.com/tinytiny/archive/2013/01/10/…

esp8266 micropython oled_micropython(4):使用ESP8266 控制 oled 屏幕,并显示 helloworld 字符...

目录前言1&#xff0c;关于esp 8266 和 oled2&#xff0c;使用lib库驱动 1306 4pin led3&#xff0c;总结前言相关micropython 全部分类&#xff1a;https://blog.csdn.net/freewebsys/category_9670462.html本文的原文连接是:https://blog.csdn.net/freewebsys/article/detail…

linphone-android移植

一&#xff1a;到网站上下载linphone-android的源码: http://www.linphone.org/eng/download/git.html linphone-android对应的git地址是: 在虚拟机中敲入如下命令 git clone git://git.linphone.org/linphone-android.git --recursive 记住一定要把rescursive给带上&…