x264交叉编译

1,473 阅读3分钟

下载x264

x264 是一个免费的软件库和应用程序,用于将视频流编码为 H.264/MPEG-4 AVC 压缩格式, www.videolan.org/developers/…

git clone https://code.videolan.org/videolan/x264.git

修改配置

  • 修改x264源码根目录下的configure中的这一行,改成下图这个样,不然生成的库的名字会是libx264.so.159 (Android系统是不识别这种命名的动态库的)

image.png 按回车进行匹配,输入i,进行修改,按esc退出修改,输入:wq保存退出 修改成libx264.$API.so

  • x264使用gcc,但是ndk21已经废弃了,需要使用旧版ndk
wget https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
unzip android-ndk-r14b-linux-x86_64.zip ndk-r14b

遇到的问题:

  1. ignoredption Found no assembler Minimum version is nasm-2.13 解决:安装nasm
sudo apt-get install nasm
  1. 修改x264源码根目录下的configure中的这一行,改成下图这个样,不然生成的库的名字会是libx264.so.159 (Android系统是不识别这种命名的动态库的)

image.png 按回车进行匹配,输入i,进行修改,按esc退出修改,输入:wq保存退出 修改成libx264.$API.so

build android 不同架构动态库

由于x264使用gcc,但是ndk21已经废弃,会报 No working C compiler found错误,所以需要使用旧版ndk14

编译armv7

NDK=/home/xy/android/ndk/ndk-r14b/android-ndk-r14b
PREFIX=/home/xy/android/x264/x264/so
SYSROOT=$NDK/platforms/android-21/arch-arm/
CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-

./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$SYSROOT \
--host=arm-linux

make \
make install

编译armv8

NDK=/home/xy/android/ndk/ndk-r14b/android-ndk-r14b
PREFIX=/home/xy/android/x264/x264/so/arm64
SYSROOT=$NDK/platforms/android-21/arch-arm64/
CROSS_PREFIX=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-
 
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$SYSROOT \
--host=aarch64-linux

make \
make install

编译x86

NDK=/home/xy/android/ndk/ndk-r14b/android-ndk-r14b
PREFIX=/home/xy/android/x264/x264/so/x86
SYSROOT=$NDK/platforms/android-21/arch-x86/
CROSS_PREFIX=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-
 
 
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$SYSROOT \
--host=x86-linux

make \
make install

编译x86_64

NDK=/home/xy/android/ndk/ndk-r14b/android-ndk-r14b
PREFIX=/home/xy/android/x264/x264/so/x86_64
SYSROOT=$NDK/platforms/android-21/arch-x86_64/
CROSS_PREFIX=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-
 
 
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$SYSROOT \
--host=x86_64-linux

make \
make install

./configure [options]

Help:
  -h, --help               print this message

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
  --enable-static          build static library
  --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

帮助 Help

- -h, --help             打印此消息

标准选项 Standard options

--prefix=PREFIX          在PREFIX中安装独立于体系结构的文件 [/usr/local]
--exec-prefix=EPREFIX    在EPREFIX中安装与体系结构相关的文件 [PREFIX]
--bindir=DIR             在DIR[EPREFIX/bin]中安装二进制文件
--libdir=DIR             在目录[EPREFIX/lib]中安装libs
--includedir=DIR         在目录[PREFIX/include]中安装includes
--extra-asflags=EASFLAGS 将EASFLAGS添加到ASFLAGS
--extra-cflags=ECFLAGS   将ECFLAGS添加到CFLAGS
--extra-ldflags=ELDFLAGS 将ELDFLAGS添加到LDFLAGS
--extra-rcflags=ERCFLAGS 将ERCFLAGS添加到RCFLAGS

配置选项 Configuration options

--disable-cli            禁用cli
--system-libx264         使用系统libx264而不是内部
--enable-shared          构建共享库
--enable-static          构建静态库
--disable-bashcompletion 禁用bash完成脚本的安装
--enable-bashcompletion  强制安装bash完成脚本
--bashcompletionsdir=DIR 在DIR[auto]中安装bash完成脚本
--disable-opencl         禁用OpenCL功能
--disable-gpl            禁用仅限GPL的功能
--disable-thread         禁用多线程编码
--disable-win32thread    禁用Win32线程(仅限windows)
--disable-interlaced     禁用隔行编码支持
--bit-depth=BIT_DEPTH    设置输出位深度(810,全部)[all]
--chroma-format=FORMAT   输出色度格式(400420422444,全部)[all]

高级选项 Advanced options

--disable-asm            禁用特定于平台的组件优化
--enable-lto             启用链接时间优化
--enable-debug           添加-g
--enable-gprof           添加-pg
--enable-strip           添加-s
--enable-pic             构建独立于位置的代码

交叉编译 Cross-compilation

--host=HOST              构建要在主机上运行的程序
--cross-prefix=PREFIX    为编译工具使用前缀
--sysroot=SYSROOT        交叉构建树的根

外部库支持

--disable-avs            禁用avisynth支持
--disable-swscale        禁用swscale支持
--disable-lavf           禁用libavformat支持
--disable-ffms           禁用ffmpegsource支持
--disable-gpac           禁用gpac支持
--disable-lsmash         禁用lsmash支持