Tag Archives: CentOS

Linphone 2.0 for Android 编译

新版的Linphone支持SUBSCRIBE/NOTIFY了,当然要把最新代码拿出来集成到我们的客户端里头。

这次编译除了ndk之外还需要Android sdk,其他的前提条件倒是差不多。

上次我是在centos 5.5 64位上编译成功的,结果这次在同一个环境地下居然不行了,编译第一个模块libilbc-rfc3951就碰到了问题:

configure: error: cannot find install-sh, install.sh, or shtool in build-aux “.”/build-aux
make: *** [/root/linphone-android/submodules/libilbc-rfc3951/Makefile] Error 1

搜了一下没搞明白怎么回事儿,装了shtool也没有用,单独把这个模块的源代码clone出来编译也遇到同样的问题。于是转向机器上的另外一个centos 6.3的虚拟机。

准备环境倒也不麻烦,无非就是autoconf, automake, aclocal, libtoolize, pkgconfig这几个,不过aclocal,libtoolize通过yum是找不到的,安装autoconf的时候不要yum,直接用源代码编译安装,这样也就包含了aclocal和libtoolize了。

然后就遇到下载文件按失败:

/usr/bin/wget –no-check-certificate http://www.webrtc.org/ilbc-freeware/ilbc-source-code-and-utili/ilbc-utilities/extract-cfile.awk -O extract-cfile.awk
–2013-04-10 23:17:41– http://www.webrtc.org/ilbc-freeware/ilbc-source-code-and-utili/ilbc-utilities/extract-cfile.awk
正在解析主机 www.webrtc.org… 74.125.31.121, 2404:6800:4008:c01::79
正在连接 www.webrtc.org|74.125.31.121|:80… 失败:拒绝连接。
正在连接 www.webrtc.org|2404:6800:4008:c01::79|:80… 失败:网络不可达。

看了一下,这个www.webrtd.org被盾了,需要用代理访问,windows下载之后上传即可。(PS: 后来又能下载了)

后面就遇到:

ant partial-clean
make: execvp: ant: 权限不够
make: *** [generate-apk] 错误 127

yum install ant错误消失了,但是马上就遇到:
BUILD FAILED
/root/linphone-android/build.xml:91: The following error occurred while executing this line:
/root/adt-bundle-linux-x86_64-20130219/sdk/tools/ant/build.xml:206: No supported regular expression matcher found: java.lang.ClassNotFoundException: org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp

手工安装最新的ant 1.9.0。

然后就遇到:

[aapt] /root/adt-bundle-linux-x86_64-20130219/sdk/platform-tools/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

BUILD FAILED
/root/adt-bundle-linux-x86_64-20130219/sdk/tools/ant/build.xml:647: The following error occurred while executing this line:
/root/adt-bundle-linux-x86_64-20130219/sdk/tools/ant/build.xml:688: null returned: 127

装了几个版本的libz之后都有问题,后来忽然想到README里头有一句:on some 64 bits systems you’ll need the ia32-libs package。

看了一下果然是需要32位的包,因为安卓源代码本来就是32位的。可是找了半天也没有找到这个ia32-libs,ubuntu上倒是有现成的。那就只能见招拆招了,直接http://rpmfind.net/搜 libz.so.1,找32位的下载安装,幸好缺的包也不多,再装了一个libncurses.so.5之后总算成功了。

要是32位系统的可能会更容易些,估计ubuntu会更容易些,yum现在很落后了,好多包也没有,或者就是很老。下次试试。

centos安装git

上次虚拟主机上没有yum,所以git是直接源代码编译安装的,略显麻烦;这次虚拟机上用yum install git居然找不到package。难不成非得要编译?按说git这样的东西应该包含进来才对啊。再仔细一找,原来是需要先添加EPEL(Extra Packages for Enterprise Linux) repository:

rpm -Uvh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

然后就可以yum安装了。

具体参考:http://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F

Linphone Android 编译

准备搞搞VOIP的业务,看了一下开源的VOIP客户端,觉得Linphone还是不错的,同时提供Android和IPhone客户端,所以决定下源代码编译一下。

我用的是我的T400上32位的CentOS 6虚拟机,首先当然是git下载源代码,不知道是我的无线网卡抽风还是公司的无线路由抽风,反正那几天网不停的掉,每次下载到半路就失败了。看了一下.git文件夹下的config文件,实际上它也是根据这个config文件分submodule递归下载的,所以理论上下载失败之后是可以分submodule下载的,但他是递归的,实在是太麻烦了,而且也容易出问题,放弃。

最后没办法,只好去我自己的服务器上下载,共享主机也没法用yum,不过自己编译安装也不麻烦,后来遇到无法连接的问题,发现是防火墙封了git默认的9418端口,居然连往外访问也封,下班前给HostMonster客服发了个邮件,第二天早上来收到回复说已经打开了。美国的网速就是快啊,几分钟就搞定了,顺带下载了iphone的源代码,然后scp到本地虚拟机上。

后面的准备过程就比较简单了,按照README操作即可。那些依赖库直接yum安装即可,ndk我用的是最新的r8b。prepare_sources过程中还要下载一些东西,网络不好的话也容易出问题,比较大的一个是SILK_SDK_SRC_v1.0.8.zip,可以用工具下载之后放到./submodules/mssilk/sdk/里头。

最后编译的时候报错:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecore.c:49:40: error: expected ‘,’ or ‘;’ before ‘Devel’
jni/..//submodules/linphone/build/android/../../coreapi/linphonecore.c:1519:29: error: expected ‘,’ or ‘;’ before ‘Devel’
主要其实是常量LIBLINPHONE_VERSION没有定义,不知道是版本管理问题还是故意留着让你修改的,看了一下也就这两个地方定义了,所以直接复制一个字符串就行了,我用的是”1.3.2-20120919″

然后是另外一个错误:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c: In function ‘linphone_call_start_audio_stream’:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c:1236:64: error: expected ‘)’ before ‘Devel’
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c: In function ‘linphone_call_start_video_stream’:
jni/..//submodules/linphone/build/android/../../coreapi/linphonecall.c:1334:64: error: expected ‘)’ before ‘Devel’
这回是LINPHONE_RTCP_SDES_TOOL,他用到的LINPHONE_VERSION没定义,直接赋值”Linphone-1.3.2-20120919″了事儿。

后面的就很顺利了,就是稍微有点慢。

有点奇怪的是我第一次编译成功的时候没有缺一些包,包括liblinphone.so等,当时也没报错啊,第二次编译就好了,但是已经不能重现了,不知道为什么会这样。