首先接到这一个项目,说是要用mediastreamer2做一个网络电话。之前也是从来没有接触过。于是首先开始在百度中搜索一下需要哪些东西,以及那些步骤。最后大致了解了一下,做这个项目最终要的就是需要移植好多的库,每一个库都需要配置,最后在交叉编译好动态库,然后在执行mediastreamer2的时候去调用这些动态库和头文件就OK了。1,首先meidastream2是基于ortp库的,那么首先就是下载源码,交叉编译。交叉编译ortp下载源码:http://savannah.c3sl.ufpr.br/linphone/ortp/sources/?C = S; O = A我使用0.18.0版本ortp -0.18.0.tar.gz然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf ortp-0.18.0.tar .gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim * .sh ./configure CC = arm-linux-gcc –host = arm-linux –target = arm-linux –prefix = / home / protocol_stack / install / make make install然后用chmod 777 * .sh执行脚本./**.sh
这样子就完成了配置,编译,安装。(安装目录为/ home / protocol_stack / install /,也就是最后生成的头文件,可执行文件,库文件都会在这个目录下)2,因为项目是要用到SIP协议的,所以我们还需要移植啜饮的库osip2和eXosip2协议,这两个协议对应两个库,约瑟夫是简单的约瑟夫协议,但是因为API少等一系列原因,增加了eXosip2对osip2的补充。交叉编译osip2下载源码:http://ftp.gnu.org/gnu/osip/我使用的版本是3.6.0 libosip2-3.6.0.tar.gz然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf libosip2-3.6.0.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim * .sh ./configure –host = arm-linux –target = arm-linux –prefix = / home / protocol_stack / install / make make install然后用chmod 777 * .sh 执行脚本./ ** .sh交叉编译的eX osip2下载源码:http://ftp.gnu.org/gnu/osip/
我使用的版本是3.6.0 libeXosip2-3.6.0.tar.gz然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf libeXosip2-3.6.0.tar。 gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim * .sh ./configure –host = arm-linux - -target = arm-linux –prefix = / home / protocol _ stack / install / PKG _ CONFIG _ PATH = / home / protocol _ stack / install / lib / pkgconfig make make install然后用chmod 777 * .sh执行脚本./ * .sh接下来可以编译mediastreamer2了,不过ms2,依赖好多库:ogg,speex,pulseaudio。而pulseaudio又依赖许多库:alsa,json,libtool.3,交叉编译ogg下载源码:http:/ /xiph.org/downloads/我使用1.3.1版本libogg-1.3.3.tar.gz然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf libogg-1.3 .3.tar.gz注意这 有权限的问题,那么就在命令行前边加上须藤然后配置把下边这三行写成一个脚本VIM * .SH
./configure CC = arm-linux-gcc –prefix = / home / protocol_stack / install / –host = arm-linux make make然后用chmod 777 * .sh执行脚本./ * .sh 4,交叉编译的的的的的的的的的的的Speex的语音下载源码:HTTP://www.speex.org/downloads/我使用1.2rc1版本的的的的的的的的的的的的的Speex,1.2rc1。 tar。gz然后通过华文轩,把下载好的库文件拷贝到Linux的下,然后解压tar zxvf speex-1.2rc1.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim * .sh ./configure CC = arm-linux-gcc –prefix = / home / protocol_stack / install / –with-ogg = / home / protocol _ stack / install / - -enable -fixed -point - disable-float-api \ –host = arm-linux make make install然后用chmod 777 * .sh执行脚本./ **
.sh 5,交叉编译pulseaudio下载源码:http://freedesktop.org/software/pulseaudio/releases/我使用1.0版本pulseaudio- 1.0.tar.gz然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf pulseaudio-1.0.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim **。sh ./configure CC = arm-linux-gcc CXX = arm-linux-g ++ –prefix = / home / protocol _ stack / install –host = arm-linux –disable -rpath - disable -nls –disable -dbus –disable-bluez –disable-samplerate –disable-solaris –disable-gconf –disable -avahi –disable-jack –disable-lirc –disable –gibib2 - 禁用 - gtk2 –disable-openssl –disable-ipv6 –disable-asyncns –disable-per-user-esound-socket –disable-oss-output –disable-oss-wrapper –disable-x11 - enable- neon -opt = no –with-database =简单的PKG _ CONFIG _
PATH = / home / protocol _ stack / install / lib / pkgconfig CPPFLAGS = -I / home / protocol _ stack / install / include LDFLAGS = -L / home / protocol _ stack / install / lib CFLAGS = -I / home / protocol _ stack / install / include make make install然后用chmod 777 * .sh执行脚本./ * .sh错误1:检查ltdl.h …没有配置:错误:无法找到libltdl版本2.确认您安装了libtool 2.4或更高版本.make:* * 没有指定目标,也没有找到makefile.Stop。分析;找不到libltdl。确保你有libtool 2.4及以上版本。下载libtool 2.4.2版本需要交叉编译libtool下载源码如下:FTP://ftp.gnu.org/gnu/libtool/我使用2.4.2的版本的的的的的的的的的的的的libtool的-2.4.2.tar.gz然后通过华文轩(窗口和linux的通信),把下载好的库文件拷贝到Linux下,然后解压tar zxvf libtool-2.4.2.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上须藤然后配置把下边 三行VI米 * .SH ./confi克URE主机=臂的Linux的的前缀= /家庭/ protocol_stack /安装/使化妆安装然后用CHMOD 777 .sh .sh 交叉编译alsa:http:而定,可以使用命令查看内核中的ALSA的版本:#猫的/ proc / asound在/版本高级Linux Sound Architecture Driver版本1.0.24。可以到内核中的ALSA驱动版本是1.0.24,所以我选1.0.24版本的ALSA-LIB-1.0.24.1.tar.gz然后通过华文轩(windows和linux的通信),把下载好的库文件拷贝到Linux的下,然后解压tar zxvf speex-1.2rc1.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim .sh。/ configure –host = arm-linux –prefix = / home / protocol_stack / install / make make install然后用chmod 777 * .sh执行脚本./ * .sh错误:configure:错误:软件包需求sndfile> = 1.0.20)未被满足:没有找到软件包’sndfile’分析:缺少库libsndfile,那么接下来再进行交叉编译libsndfile libsndfile-1.0.25.tar.gz http:// www。 linuxfromscratch。组织/ BLFS / / SV N /体/库ndfile.html
然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf libsndfile-1.0.25.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim * .sh ./configure –host = arm-linux –prefix = / home / protocol_stack / install / make make install然后用chmod 777 * .sh执行脚本./* * .sh 7,最后编译mediastreamer2下载源码:http://ftp.twaren.net/ Unix的/ NonGNU // Linphone中/ mediastreamer /我使用2.8版本mediastreamer-2.8.0 .tar.gz然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf mediastreamer-2.8.0.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置把下边这三行写成一个脚本vim ** .sh ./configure CC = arm-linux-gcc –prefix = / home / protocol _ stack / install / PKG _ CONFIG _ PATH = / home / protocol _
stack / install / lib / pkgconfig –disable -gsm –enable-video = no –enable-macsnd = no –disable-static –disable –sdl –disable-x11 –disable –ffmpeg - host = arm -linux -target = arm-linux make make install然后用chmod 777 * .sh执行脚本./ * .sh上面的配置选项没有屏蔽v4l1和v4l2,所以还得交叉编译v4l编译v4l libv4l -0.6 .tar.gz下载源码:http://pkgs.fedoraproject.org/repo/pkgs/libv4l/然后通过winshare(Windows和Linux的通信)把下载好的库文件拷贝到Linux下,然后解压tar zxvf libv4l - 0.6.4.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置我使用0.6.4版本libv4l-0.6.4.tar.gz make清理使CC = arm-linux-gcc make install PREFIX = / home / protocol _
stack / install编译mediastreamer2出错:(1)检查LIBCHECK …没有检查LIBJSON …没有配置:错误:未满足软件包需求(json> = 0.9):没有软件包’json’found解决方法就是交叉编译json下载源码:http://ftp.debian.org/debian/pool/main/j/json-c/分析:缺少json库,那么我们继续交叉编译json库json-c _ 0 .12.1.orig.tar .gz然后通过华文轩(windows和linux的通信),把下载好的库文件拷贝到Linux的下,然后解压tar zxvf mediastreamer-2.8.0.tar.gz注意这个时候可能会发生错误,是没有权限的问题,那么就在命令行前边加上sudo然后配置./configure –host = linux-arm \ - -prefix = / home / protocol_stack / install / make && make install好了,json库已经编译完成了。接下来我们继续编译mediastreamer2 …..但是还是有问题,怎么办呢?还是哪个问题还是找不到JSON库。分析:在JSON的论坛中,找到了解决方案:把编译生成的/ LIB / pkgconf ig /这个目录下生成了一个JSON-c.pc最后mediastreamer2在调用的时候找的是json.pc.那么我们就把这个文件名改为json.pc #mv json-c.pc json.pc OK,这次这个是可以编译的过去了。接下来继续编译…又出现问题了/ home / protocol _ stack / install / lib / libjson.so:对`
rpl _ malloc’/ home / protocol’未定义引用_ stack / install / lib / libjson.so:对’rpl _ realloc’问题分析:这个错误的原因是因为没有定义rpl _ malloc和rpl _ realloc这两个变量。那么我们应该怎么办么?那么就在这个目录下进行查这两个变量是在哪里定义的?在是:#grep“rpl_malloc”-nR * …….找到了,原来这两个变量是在这个配置的文件中的。是一个宏开关那么就好办了,我们就直接把这两个宏进行注释。嗯,继续……我们重新编译JSON库…嗯嗯编译好了,接下来继续来编译mediastreamer2 ….又出错了,还是这个原因/ home / protocol _ stack /安装/ lib / libjson.so:对rpl _ malloc'/ home / protocol的未定义引用_ stack /安装/ lib目录/ libjson.so:undefined参考
RPL _ realloc的嗯嗯,还是这个原因?究竟是为什么呢。再次来到JSON的目录下,再次看有没有把那两个宏开关给关闭?嗯哼?竟然没有关闭?
分析?明白了。原来是我把配置文件,再进行关闭。宏开关。最后直接make && make install -j8直接编译,安装,是不能再次进行配置的。因为以配置文件就会再次生成,那么宏开关就又开了.OK,安装好了,下来继续进行编译mediastreamer2 ………… …………..又出现了问题?error: /user/include/python2.7/pyconfig.h:15:52:致命错误:arm-linux-gnueabi / python2.7 / pyconfig.h:没有这样的文件或目录编译终止。分析::找不到arm -linux-gnueabi / python2.7 / pyconfig.h这文件。那就继续交叉编译蟒蛇好吧,继续下载蟒蛇,然后再进行交叉编译,但是编译的Python中的时候出来一系列的问题。根本没有办法解决。那么该怎么办呢?时候一个小时又一个小时的过?最后有一个大胆的想法,既然蟒蛇都编译不下去。那就不要了。于是,在mediastreamer2的./configure中添加一项 - 品,而没有蟒蛇….再次配 译…… …..
还没一样的错误。怎么办呢?在是在就又在论坛上进行找灵感…..还是找不到…又一结合前边几个库的配置编译,发现不能用一个模块还可以用另外一个–disable-python …于是乎就把–without-python改为了–disable-python继续编译…. ……………. …到了这个节骨眼上了,编译每跳一下,我的心就跟着逗一下….心酸…… …… ……竟然编译成功了。哈哈………于是,马上就把编译好的库,拷贝到了开发板……嗯,本来还想编译好的库目录树拷贝下的,但是太多了,放不下……算了吧….找到编译好的库在库中的/ bin中中找到ARM-Linux的mediastream然后执行./arm-linux-mediastream ….了解错误:加载共享库时:libmediastreamer.so.1无法打开共享目标文件:无此文件答案:分析:遇到这个问题就是,libmediastreamer.so.1这个动态库,在可执行文件armlinuxmediastreamer执行的时候,调用这动 到这个动态库那么我们就是要把我们编译好的动态链接库的目录加到环境变量中LD 库 PATH = $ LD 库
PATH://手臂/ lib /这个目录下就是放着我们编译好的所有动态链接库(包括libmediastreamer.so.1)执行步骤:LD _ LIBRARY _ PATH = $ LD _ LIBRARY _ PATH:// arm / lib导出LD LIBRARY PATH ./arm-linux-mediastream mediastream –local –remote