vlc-android 编译踩坑记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012532305/article/details/83586376

VLC-Android编译踩过的坑及感悟,整理发表出来,希望对大家有帮助。

一、建议掌握的基本知识【否则在编译过程中,连错误都不知道怎么查,如下一些基本点是针对linux小白的,大牛勿喷】

a. Makefile的工作原理,明白Rule-Target-Prerequisites-Recipe的关系,能自己写一些简单的Makefile

b.autotools工具集的工作原理,因为vlc的编译依赖几十个库,这些库的编译都是基于autotools工具集,明白configure.ac, Makefile.am

的原理,能看懂且能修改; libtoolize, autoreconf命令的使用及工作过程【aclocal, libtoolize, autoconf,autoheader,automake】

, 看懂Makefile文件之间的调用依赖会帮助你更清晰理解整个编译的过程

c. 基本的编译命令及gcc编译过程,预处理【E】-编译【c】-汇编【S】-连接【o】

d.基本的linux命令,find、grep等要经常用到,在修改源码的时候用到

二、编译前注意的点

a. 如果用虚拟机如vmware workstation来编译的,尤其要注意尽量把源码放在虚拟机的目录里,而不要放在共享文件夹下【vmware可以和windwos通过共享文件来来交互,所以笔者曾经把ffmpeg的代码解压到了共享文件夹里,结果在编译时死活报library.mk有错,可一看它的规则都没有问题,后来查明是换行符在windows和linux下不同导致,如果直接解压在linux目录下则无问题】

b. vlc-android编译的关键是vlc中的contrib组件编译,这里一定要保证vlc的版本是正确的,要跟compile-libvlc.sh保持一致,笔者曾经因为vlc的git代码下载不下来,就随便找了一个版本的源码放在vlc-android下,结果编译到最后,发现一堆错误,欲哭无泪;只好老老实实按compile-libvlc.sh中的hash值找到相应的代码下载下来,编译才正常;这里分享一个技巧,当发现vlc的代码下载不下来,尤其是比较早的版本时,可以先通过GitHubDesktop把master版本下载下来,再git checkout hash值,把指定的版本下载下来,尤其是早期的ffmpeg版本,用git clone很难下载下来,通常是下载到30%多就卡着不动了,用GitHubDesktop下载就很快;

三、本次编译的环境

a. 操作系统 Ubuntu14.04 VmwareWorkstation中装的

b. vlc-android版本:2.16

c. NDK版本: r13b

四、遇到的问题及解决方案记录

a. 

libtoolize: Remember to add `LT_INIT' to configure.in.
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.

解决办法 :照提示修改,在configure.ac 中添加LT_INIT Makefile.am中添加AC_CONFIG_MACRO_DIR([m4])

b.
./configure: line 13231: syntax error near unexpected token `FREETYPE,'
./configure: line 13231: `PKG_CHECK_MODULES([FREETYPE], freetype2 >= 9.10.3,'

解决办法 /usr/share/aclocal/pkg.m4 移入m4 然后执行autoreconf

c.

configure.in:74: error: possibly undefined macro: AC_DISABLE_SHARED
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.in:75: error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL
configure.in:76: error: possibly undefined macro: AC_PROG_LIBTOOL

解决办法:
Fixed by inserting these into compile.ac
m4_pattern_allow([^AM_])
m4_pattern_allow([^AC_])
m4_pattern_allow([^AS_])

d.

error: Libtool library used but 'LIBTOOL' is undefined 
 解决办法:在configure.ac 中添加LT_INIT Makefile.am中添加AC_CONFIG_MACRO_DIR([m4]) 拷贝libtool.m4 到工程m4目录下,然后执行libtoolize aclocal autoreconf

e.

 ffmpeg ERROR: libopenjpeg1 not found 找到libopenjpeg1.pc 拷贝到vlc/contrib/arm-linux-androideaib/lib/pkg-config 下
 在libs 后加入-lm

f.

configure: error: cannot find install-sh or install.sh in . ./.. ./../.. 错误:

在源码目录下执行 autoreconf -f -i -Wall,no-obsolete

g .如果一个库已经编译过就不想编译就在contrib/src/contrib-arm-linux-androideabi 创建.库名,比如x265不想编译,就在contrib/src/contrib-arm-linux-androideabi下创建.x265

h.

提示gettext版本不够高,就去configure.ac 中把要求的GETTEXT版本改低即可

四、编译

在编译过程中会通过vlc/contrib/src/main.mk去下载各个版本的库,最好提前下载好,如果下载失败,可以直接去vlc官网上去下载,强烈推荐在http://download.videolan.org/pub/contrib/这个上面去下载,几乎你要的都有,不用去网上找。感觉我踩的坑已经够多了,如果上面的坑都踩过了,基本上半个多小时就编译过了。

附上编译的版本:

https://download.csdn.net/download/u012532305/10755413

在折腾中成长!!

猜你喜欢

转载自blog.csdn.net/u012532305/article/details/83586376