1、配置NDK
1.1、 ubuntu下载
wget https://dl.google.com/android/repository/android-ndk-r24-linux.zip
1.2、解压NDK
unzip android-ndk-r24-linux.zip
1.3、配置NDK环境变量
vim /etc/profile
1.4、 在profile文件中添加如下内容
export NDK=/home/ubuntu/ndk/android-ndk-r24
export PATH=$NDK:$PATH
1.5、使用source命令,让配置生效
source /etc/profile
1.6、使用echo打印刚刚配置的NDK路径
echo $NDK
2、下载源码
git clone https://code.videolan.org/videolan/x264.git
3、查看编译参数
./configure --help
//标准选项,一般需要配置--prefix
Standard options:
--prefix=PREFIX install architecture-independent files in PREFIX[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX[PREFIX]
--bindir=DIR install binaries in DIR [EPREFIX/bin]
--libdir=DIR install libs in DIR [EPREFIX/lib]
--includedir=DIR install includes in DIR [PREFIX/include]
--extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS
--extra-rcflags=ERCFLAGS add ERCFLAGS to RCFLAGS
//配置选项
Configuration options:
--disable-cli disable cli //关闭命令行工具
--system-libx264 use system libx264 instead of internal
--enable-shared build shared library //编译成动态库 .so
--enable-static build static library //编译成静态库 .a
--disable-bashcompletion disable installation of bash-completion script
--enable-bashcompletion force installation of bash-completion script
--bashcompletionsdir=DIR install bash-completion script in DIR [auto]
--disable-opencl disable OpenCL features
--disable-gpl disable GPL-only features
--disable-thread disable multithreaded encoding
--disable-win32thread disable win32threads (windows only)
--disable-interlaced disable interlaced encoding support
--bit-depth=BIT_DEPTH set output bit depth (8, 10, all) [all]
--chroma-format=FORMAT output chroma format (400, 420, 422, 444, all) [all]
//高级选项
Advanced options:
--disable-asm disable platform-specific assembly optimizations
--enable-lto enable link-time optimization
--enable-debug add -g
--enable-gprof add -pg
--enable-strip add -s
--enable-pic build position-independent code
//交叉编译选项(必选项)
Cross-compilation:
--host=HOST build programs to run on HOST
--cross-prefix=PREFIX use PREFIX for compilation tools
--sysroot=SYSROOT root of cross-build tree
//扩展库支持
External library support:
--disable-avs disable avisynth support
--disable-swscale disable swscale support
--disable-lavf disable libavformat support
--disable-ffms disable ffmpegsource support
--disable-gpac disable gpac support
--disable-lsmash disable lsmash support
4、编译脚本
#!/bin/bash
NDK=/home/ubuntu/ndk/android-ndk-r24
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=21
function build
{
./configure \
--prefix=$PREFIX \
--disable-cli \
--disable-asm \
--enable-shared \
--enable-pic \
--host=$HOST \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$TOOLCHAIN/sysroot \
make clean
make -j8
make install
}
#armeabi-v7a
PREFIX=./android/armeabi-v7a
HOST=armv7a-linux-android
export TARGET=armv7a-linux-androideabi
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export EXTRA_CFLAGS="-O0 -g" # 配置C编译器参数,-O0意思是设置优化等级为0,-g指的是生成符号表,这样在Android Native层使用libx264.so中的函数出错的时候可以配合 add2line查找出>是哪一行代码的问题
export EXTRA_CXXFLAGS="-O0 -g" # 配置C++编译器参数,参数含义同上
export CROSS_PREFIX=$TOOLCHAIN/bin/llvm-
build
5、移除编译出来的so库会带有后缀
修改x264的configure文件,如果使用是vim编辑器的话,可以使用/查找“SunOS”,使用n查看下一个位置
==============================================
找到下面内容
elif [ "$SYS" = "SunOS" ]; then
echo "SOSUFFIX=so" >> config.mak
echo "SONAME=libx264.so.$api" >> config.mak
echo "SOFLAGS=-shared -Wl,-h,$(SONAME) $SOFLAGS" >> config.mak
else
echo "SOSUFFIX=so" >> config.mak
echo "SONAME=libx264.so.$api" >> config.mak
echo "SOFLAGS=-shared -Wl,-soname,$(SONAME) $SOFLAGS" >> config.mak
==============================================
修改成:
elif [ "$SYS" = "SunOS" ]; then
echo "SOSUFFIX=so" >> config.mak
echo "SONAME=libx264.so" >> config.mak
echo "SOFLAGS=-shared -Wl,-h,$(SONAME) $SOFLAGS" >> config.mak
else
echo "SOSUFFIX=so" >> config.mak
echo "SONAME=libx264.so" >> config.mak
echo "SOFLAGS=-shared -Wl,-soname,$(SONAME) $SOFLAGS" >> config.mak