1 下载代码
git clone git://git.videolan.org/vlc/vlc-android.git
2 编译依赖库
export ANDROID_NDK=/home/hdhuang/Android/android-ndk-r5c/
cd vlc-android/extras/contrib/
./bootstrap -t arm-eabi -d android
提示如下:
[contrib] No install dir specified, using '/home/hdhuang/Android/git/vlc-android/extras/contrib/hosts/arm-eabi'
[contrib] *****************************************************************
[contrib] * If you need contribs with all debug information, run this *
[contrib] * line and compile the libraries on your own. *
[contrib] * CONTRIBS_RELEASE=no ./bootstrap *
[contrib] *****************************************************************
[contrib] Using 2 processor(s)
(不懂,不管它。
安装编译需要的工具:)
sudo apt-get install wget
sudo apt-get install autoconf
sudo apt-get install libtool
sudo apt-get install subversion
(subversion 是SVN版本管理里面的一个东西。)
make
(然后就会上网下载需要的依赖库代码)
错误报告:
wget: 无法解析主机地址 “dl.matroska.org”
make[1]: *** [libebml-1.2.0.tar.bz2] 错误 4
make[3]: arm-elf-g++:命令未找到
make[3]: *** [Media.o] 错误 127
libeml库没有下到,arm-elf-g++没有找到。
手动下载。libebml-1.2.0.tar.bz2
make
wget: 无法解析主机地址 “dl.matroska.org”
make[1]: *** [libmatroska-1.1.0.tar.bz2] 错误 4
手动下载libmatroska-1.1.0.tar.bz2
(估计是今天dl.matroska.org有点问题,我昨天链接dl.matroska.org的时候还是没有问题的)
make
make[3]: 正在进入目录 `/home/hdhuang/Android/git/vlc-android/extras/contrib/build-src/live/liveMedia'
arm-elf-g++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 Media.cpp
make[3]: arm-elf-g++:命令未找到
make[3]: *** [Media.o] 错误 127
编译 Media.cpp的时候找不到编译器arm-elf-g++。
当然找不到了我用的是arm-linux-g++
查看/build-src 的makefile live部分
ifdef HAVE_ANDROID
patch -p0 < Patches/live-android.patch
endif
然后查看 live-android.patch
-CROSS_COMPILE?= arm-elf-
-COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
+CROSS_COMPILE?= arm-linux-androideabi-
+COMPILE_OPTS = $(INCLUDES) -I. -I$(ANDROID_NDK)/platforms/android-9/arch-arm/usr/include -O2 -DLOCALE_NOT_USED -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
ANDROID的应该是调用下面的配置编译项才对的,怎么调用上面项了呢?
path 是什么?(我是小白来的,不熟悉linux)
path [-p <剥离层级>] < [修补文件]
diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。
patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。
之一步之后,你的文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢?
patch -R B C 就可以重新还原到A了。
diff -rc DIR_A DIR_B >C
这个时候补丁文件C中会记录了原始文件的路径为 DIR_A/A
现在另一个用户得到了A文件和C文件,其中A文件所在的目录也是DIR_A。 一般,他会比较喜欢在DIR_A目录下面进行patch操作,它会执行
patch
patch -p0 < Patches/live-android.patch 那这个patch打包到那个文件了呢?
diff -ruN live/config.armlinux live-t/config.armlinux
--- live/config.armlinux 2011-03-15 08:40:37.000000000 +0900
+++ live.new/config.armlinux 2011-03-22 01:41:26.445293024 +0900
打包到config.armlinux文件了。
看了这个文件没有打补丁到这个文件里面。config.mak的配置文件里面有HAVE_ANDROID=1,为什么没有patch文件呢?
touch live
chmod -R u+w live
patch -p0 < Patches/live-uselocale.patch
patching file live/liveMedia/include/Locale.hh
Hunk #1 FAILED at 27.
1 out of 1 hunk FAILED -- saving rejects to file live/liveMedia/include/Locale.hh.rej
patching file live/liveMedia/Locale.cpp
Hunk #1 FAILED at 22.
1 out of 1 hunk FAILED -- saving rejects to file live/liveMedia/Locale.cpp.rej
patching file live/liveMedia/RTSPClient.cpp
Hunk #1 FAILED at 1019.
Hunk #2 FAILED at 1033.
2 out of 2 hunks FAILED -- saving rejects to file live/liveMedia/RTSPClient.cpp.rej
patching file live/liveMedia/RTSPClient.cpp
Hunk #1 FAILED at 935.
1 out of 1 hunk FAILED -- saving rejects to file live/liveMedia/RTSPClient.cpp.rej
patching file live/liveMedia/RTSPCommon.cpp
Hunk #1 FAILED at 137.
1 out of 1 hunk FAILED -- saving rejects to file live/liveMedia/RTSPCommon.cpp.rej
在patching live-uselocale.patch的时候已经出问题的了。所以没有执行后面的代码。
我估计是vlc的版本和live的版本已经不对应的问题导致的了!
奶奶的写好的东西没有了,那就不写那么详细了!大概描述。
我把faplayer的live55版本放过来,就可以编译live库了。
编译taglib的时候,提示cmake 没有权限,cmake 没有安装
sudo apt-get install cmake 一下。
编译完成。
3 编译vlc
cd ../vlc-android
./bootstrap
mkdir builddir
. cd builddir
. ../extras/package/android/configure.sh
生成编译脚本,
sh $VLC_SOURCEDIR/configure.sh 文件生成配置文件的。
编译,提示liba52 找不到头文件,估计也是版本不对了导致。
我先屏蔽了liba52库先。
--disable-a52 \
--disable-goom \
--disable-projectm
. ./compile -k
调用make file
编译vlc 。
ERROR : ../../../extras/package/android/../../../modules/audio_filter/converter/dtstofloat32.c:37: 80: dca.h: No such file or directory
文件有错。
#include <dca.h> /* libdca header file */
在build-src的libdca的include是有dca.h的文件的,只是它找不到了。
MAKE : audio_filter
DCA_CFLAGS = -I/home/hdhuang/Android/git/vlc-android/extras/contrib/hosts/arm-eabi/include/libdca
这个目录下面没有libdca的文件。
我把lidbca的include头文件拷贝到libdca目录下。编译成功了。
我从新把a52打开看。
生成编译脚本:
checking a52dec/a52.h usability... no
checking a52dec/a52.h presence... no
checking for a52dec/a52.h... no
configure: error: Could not find liba52 on your system: you may get it from http://liba52.sf.net/. Alternatively you can use --disable-a52 to disable the a52 plugin.
在/hosts/arm-eabi/include/下面有a52dec/a52.h文件,问题怎么说没有呢?
这里检测的路径是哪里的路径呢?
我感觉应该四hosts的路径。
我把checking libswscale/swscale.h usability... no
checking libswscale/swscale.h presence... no
checking for libswscale/swscale.h... no
libswscale 路径下的文件swscale.h拿走,就报这个了。
所以是hosts的路径的。那为什么报不存在呢???
在builddir的目录下面会生成一个config,log的文件记录../extras/package/android/configure.sh脚本的执行情况的。
显示在
configure:35488: checking a52dec/a52.h usability
configure:35488: /home/hdhuang/Android/android-ndk-r5c//toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86/bin//arm-linux-androideabi-gcc --sysroot=/home/hdhuang/Android/android-ndk-r5c//platforms/android-9/arch-arm -std=gnu99 -c -O2 -mlong-calls -fstrict-aliasing -fprefetch-loop-arrays -ffast-math -mfpu=neon -mtune=cortex-a8 -ftree-vectorize -mvectorize-with-neon-quad -Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Wvolatile-register-var -Werror-implicit-function-declaration -I/home/hdhuang/Android/android-ndk-r5c//sources/cxx-stl/gnu-libstdc++/include -I/home/hdhuang/Android/android-ndk-r5c//sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include -DSYS_LINUX -I/usr/include/liveMedia -I/usr/include/groupsock -I/usr/include/BasicUsageEnvironment -I/usr/include/UsageEnvironment conftest.c >&5
conftest.c:148:24: error: a52dec/a52.h: No such file or directory
# Check whether --with-a52-tree was given.这里出的问题。
do :
ac_fn_c_check_header_mongrel "$LINENO" "a52dec/a52.h" "ac_cv_header_a52dec_a52_h" "$ac_includes_default"
if test "x$ac_cv_header_a52dec_a52_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_A52DEC_A52_H 1
_ACEOF
然后调用 ac_fn_c_check_header_mongrel 函数
# Is the header compilable?
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
$as_echo_n "checking $2 usability... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
那为什么usability是no呢?
不明白啊!
他是执行
$ac_cv_header_a52dec_a52_h这个变量的,然后有问题才去查找是否编译的。
但是这个变量打印不出来。弄不出来,先不能弄这个了!
cd ./vlc-android/extras/package/android
ANDROID_NDK=/home/hdhuang/Android/android-ndk-r5c/
ANDROID_SDK=/home/hdhuang/Android/eclipse/sdk/
VLC_BUILD_DIR=/home/hdhuang/Android/git/vlc-android/builddir/
# Check environment variables
@if [ -z "$$ANDROID_NDK" -o -z "$$ANDROID_SDK" -o -z "$$VLC_BUILD_DIR" ]; then \
echo "You must define ANDROID_NDK, ANDROID_SDK and VLC_BUILD_DIR"; \
exit 1; \
我读定义了环境变量,但是他说我没有定义。
export ANDROID_NDK=/home/hdhuang/Android/android-ndk-r5c/
export ANDROID_SDK=/home/hdhuang/Android/eclipse/sdk/
export VLC_BUILD_DIR=/home/hdhuang/Android/git/vlc-android/builddir/
这样的。
make
=== Building libvlcjni ===
make[1]: 正在进入目录 `/home/hdhuang/Android/git/vlc-android/extras/package/android/vlc-android'
SharedLibrary : libvlcjni.so
/home/hdhuang/Android/android-ndk-r5c/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: cannot find -logg
@echo "=== Building libvlcjni ==="
@cd vlc-android/; \
$(ANDROID_NDK)/ndk-build
这里出的问题。