Linphone-3.2.0的X86編譯與ARM移植 收藏
Linphone在Linux X86下的編譯
(一)
Linphone依賴(lài)庫(kù)準(zhǔn)備:
speex-1.2beta3.tar.gz(依賴(lài)于libogg)
readline(optional)
intltool-0.35.0.tar.gz(optional)
ffmpeg(提供Linphone視頻支持,如不需視頻功能可不要)
Linphone版本:
linphone-3.2.0.tar.gz
O S:
Fedora9(VmWare下)
(二)
在Linux的/home/cena/目錄下新建目錄linphone在其中建立sources、build、x86_target、arm_target ;注:這里cena為用戶(hù)名,以下類(lèi)同!
[root @BCD cena]# mkdir –p /home/cena/linphone/sources,/home/cena/linphone/build \
/home/cena/linphone/x86_target, /home/cena/linphone/arm_target
將相應(yīng)的庫(kù)與Linphone源碼拷貝到sources目錄下
|soureces
--| libogg-1.1.3.tar.gz
--| libosip2-3.3.0.tar.gz
--| libeXosip2-3.3.0.tar.gz
--| speex-1.2beta3.tar.gz
--| linphone-3.2.0.tar.gz
將所有壓縮文件解壓準(zhǔn)備編譯;
[root @BCD cena]# cd linphone/sources
[root @BCD sources]# tar zxvf libogg-1.1.3.tar.gz
[root @BCD sources]# tar zxvf libosip2-3.3.0.tar.gz
[root @BCD sources]# tar zxvf libeXosip2-3.3.0.tar.gz
[root @BCD sources]# tar zxvf speex-1.2beta3.tar.gz
[root @BCD sources]# tar zxvf linphone-3.2.0.tar.gz
進(jìn)入libogg目錄,配置編譯libogg
[root @BCD sources]# cd ../build/libogg
[root @BCD libogg]#../../sources/libogg-1.1.3/configure --prefix=/home/cena/linphone/x86_target/
[root @BCD libogg]# make
[root @BCD libogg]# make install
進(jìn)入speex目錄,配置編譯speex
[root @BCD libogg]# cd ../speex
[root @BCD speex]# ../../sources/speex-1.2beta3/configure --prefix=/home/cena/linphone/x86_target/ --with-ogg=/home/cena/linphone/x86_target/
[root @BCD speex]# make
[root @BCD speex]# make install
進(jìn)入libosip目錄,配置編譯libosip
[root @BCD speex]# cd ../libosip
[root @BCD libosip]# ../../sources/libosip2-3.3.0/configure --prefix=/home/cena/linphone/x86_target/
[root @BCD libosip]# make
[root @BCD libosip]# make install
進(jìn)入libeXosip目錄,配置編譯libeXosip
[root @BCD libosip]# cd ../libeXosip
[root @BCD libeXosip]# ../../sources/libeXosip2-3.3.0/configure --prefix=/home/cena/linphone/x86_target/ PKG_CONFIG_PATH=/home/cena/linphone/x86_target/lib/pkgconfig
[root @BCD libeXosip]# make ; make install
注:這里如果上一步的libosip的安裝不是默認(rèn)的,那么在配置libeXosip時(shí)要附上
PKG_CONFIG_PATH=安裝目錄\lib\pkgconfig
進(jìn)入linphone目錄,配置編譯linphone
[root @BCD libeXosip]# cd .../linphone
[root @BCD linphone]# ../../sources/linphone-3.2.0/configure --prefix=/home/cena/linphone/x86_target/ --disable-video --enable-gtk_ui=no --with-osip=/home/cena/linphone/x86_target/ PKG_CONFIG_PATH=/home/cena/linphone/x86_target/lib/pkgconfig
[root @BCD linphone]# make
[root @BCD linphone]# make install
注: --enable-gtk_ui=no 目的是去除gtk的ui,否則編譯過(guò)程中會(huì)需要gtk+庫(kù)。
--disable-video 目的是裁剪掉視頻功能,否則編譯過(guò)程會(huì)需要ffmeg庫(kù)。
--with-osip 目的是指明編譯過(guò)程所需要的osip庫(kù)的位置。
P1:configure過(guò)程中可能會(huì)報(bào)intltool not found,這時(shí)只需要下載intltool-0.35.0.tar.gz安裝即可,最好安裝到/usr下
P2:
make過(guò)程中,會(huì)出現(xiàn)linphone-3.2.0/mediastreamer2/src/msconf.c:272 和274行的SPEEX_PREPROCESS_GET_PSD_SIZE和SPEEX_PREPROCESS_GET_PSD未定義的錯(cuò)誤。
在x86_target/include/speex找到speex_preprocess.h文件在其中加入以上兩個(gè)宏的定義。
#define SPEEX_PREPROCESS_GET_PSD_SIZE 34
#define SPEEX_PREPROCESS_GET_PSD 35
P3:make過(guò)程中,會(huì)出現(xiàn)config.h和coreapi中以及x86_target/include/osipparser2中的幾個(gè)文件重定義的錯(cuò)誤,經(jīng)查對(duì)源代碼可知道是config.h被引用了2次所致。故將coreapi中的sipsetup.c和siplogin.c中的第21行#include <../config.h>注釋掉即可
再次編譯,成功!?。“惭b后可在x86_target/bin下找到linphonec
Linphone的交叉編譯
Cross-tools:arm-linux-gcc-3.4.1
O S:Fedra9(VMware)
進(jìn)入libogg庫(kù)編譯
[root @BCD cena]# cd linphone/build/libogg
[root @BCD libogg]# ../../sources/libogg-1.1.3/configure --prefix=/home/cena/linphone/arm_target/
CC=arm-linux-gcc --host=arm-linux --enable-static --disable-shared
[root @BCD libogg]# make
[root @BCD libogg]# make install
編譯speex庫(kù)
[root @BCD libogg]# cd ../speex
[root @BCD speex]# ../../sources/speex-1.2beta3/configure --prefix=/home/cena/linphone/arm_target/ CC=arm-linux-gcc --host=arm-linux --with-ogg=/home/cena/linphone/arm_target/ --enable-static –disable-shared
[root @BCD speex]# make
[root @BCD speex]# make install
編譯libosip庫(kù)
[root @BCD speex]# cd ../libosip
[root @BCD libosip]# ../../sources/libosip2-3.3.0/configure --prefix=/home/cena/linphone/arm_target/
CC=arm-linux-gcc --host=arm-linux –enable-shared –disable-static
[root @BCD libosip]# make
[root @BCD libosip]# make install
注:這里libosip庫(kù)編譯成動(dòng)態(tài)庫(kù),否則編譯linphone時(shí)會(huì)出錯(cuò)。
編譯libeXosip庫(kù)
注:仍然編譯為動(dòng)態(tài)庫(kù),原因同上。
[root @BCD libosip]# cd ../libeXosip
[root @BCD libeXosip]# ../../sources/libeXosip2-3.3.0/configure --prefix=/home/cena/linphone/arm_target/
CC=arm-linux-gcc --host=arm-linux –enable-shared –disable-static
PKG_CONFIG_PATH=/home/cena/linphone/arm_target/lib/pkgconfig
[root @BCD libeXosip]# make
[root @BCD libeXosip]# make install
編譯linphone
[root @BCD libeXosip]# cd ../linphone
[root @BCD linphone]# ../../sources/linphone-3.2.0/configure --prefix=/home/cena/linphone/arm_target/ --host=arm-linux CC=arm-linux-gcc --enable-static --disable-shared --disable-nls --disable-manual --enable-gtk_ui=no --disable-glib --with-osip=/home/cena/linphone/arm_target/ --enable-alsa=no --enable-video=no --enable-strict=no --enable-artsc=no
PKG_CONFIG_PATH=/home/cena/linphone/arm_target/lib/pkgconfig
[root @BCD linphone]# make
[root @BCD linphone]# make install
P1:
make過(guò)程中會(huì)報(bào)
linphone-3.2.0/mediastreamer2/src/msticker.c:248: error: `CLOCK_MONOTONIC' undeclared (first use in this function)
打開(kāi)msticker.c文件找到該位置。無(wú)法確定是來(lái)自哪個(gè)頭文件,無(wú)奈下將該else語(yǔ)段注釋掉。
P2:
make過(guò)程中,會(huì)出現(xiàn)linphone-3.2.0/mediastreamer2/src/msconf.c:272 和274行的SPEEX_PREPROCESS_GET_PSD_SIZE和SPEEX_PREPROCESS_GET_PSD未定義的錯(cuò)誤。
在x86_target/include/speex找到speex_preprocess.h文件在其中加入以上兩個(gè)宏的定義。
#define SPEEX_PREPROCESS_GET_PSD_SIZE 34
#define SPEEX_PREPROCESS_GET_PSD 35
再次編譯,成功!??!安裝后可在arm_target/bin下找到linphonec
注:這里alsa被禁止了,alsa是聲音的編碼庫(kù),只有移植了alsa到arm上linphone才能進(jìn)行語(yǔ)音通話(huà),現(xiàn)階段只能進(jìn)行sip協(xié)議的互通測(cè)試。