x264的交叉编译

210 阅读1分钟

x264的交叉编译

源码地址

code.videolan.org/videolan/x2…

编译条件

  • virtualbox 安装ubuntu
  • windows 安装 virtualbox

配置configure

交叉编译需要配置jdk,ndk。 可以下载Android Studio,

配置jdk

export PATH=$PATH:/home/lijunjie/dev/studio/android-studio/jbr/bin

export PATH=$PATH:/home/lijunjie/Android/Sdk/platform-tools

export NDK_ROOT=/home/lijunjie/Android/Sdk/ndk/20.1.5948944

export TOOLCHAIN=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/

增加配置参数

  • prefix 指定编译输出参数
  • host = aarch64-linux-android 交叉编译的目标平台
  • --extra-cflags 设置-I 参数
  • --cross-prefix 设置编译参数前缀,编译现在需要设置CC CXX,其他编译命令需要增加这个前缀来完成调用
  • --sysroot 编译需要用到的头文件
#!/bin/bash
API=21
export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
./configure --prefix=./out \
	--disable-cli \
	--enable-static \
	--enable-pic \
	--disable-asm \
	--host=aarch64-linux-android  \
	--extra-cflags=--target=aarch64-none-linux-android24 -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security   -fno-limit-debug-info  -fPIC \
	--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
	--sysroot=$TOOLCHAIN/sysroot 
  • make install
  • extra-cflags 参数可以用android studio新建一个native工程,将build.ninja和rules.ninja中的编译参数放到这块。

windows中调用virtualbox

  • 在virtualbox的设置中增加分享目录a,
  • 在ubuntu中可以访问/media/a
  • 如果权限问题,需要增加自己的账号的vboxsf目录

sudo usermod -a -G vboxsf lijunjie

android studio中调用libx264.a

  • 复制 out/ 目录android studio的cpp/x264-v8
  • 修改cmakelist.txt
    • 增加so路径
    • 增加header路径
    • 增加link路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/x264-v8/lib/")
include_directories(${CMAKE_SOURCE_DIR}/x264-v8/include)
# Specifies libraries CMake should link to your target library. You
# can link libraries from various origins, such as libraries defined in this
# build script, prebuilt third-party libraries, or Android system libraries.
target_link_libraries(${CMAKE_PROJECT_NAME}
        # List libraries link to the target library
        android
        x264
        log)

在cpp中增加调用x264.h

x264_param_t param; x264_param_default( &param );

参考

交叉编译