编译x264

环境:ubuntu21.04
1.下载x264

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

2.下载Android NDK r21e(其他版本没有成功, ndk14-22的下载链接在文章末尾给出)

wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
unzip android-ndk-r21e-linux-x86_64.zip

3.在x264路径下创建并编写configure脚本

cd x264
touch buildx264_r21e.sh
sudo apt-get install gedit
gedit buildx264_r21e.sh

buildx264_r21e.sh 内容如下:

#!/bin/bash
export NDK=/home/hg/android-ndk-r21e # 这里需要替换成你本地的 NDK 路径,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=21

function build_android
{
./configure \
    --prefix=$PREFIX \
    --disable-cli \
    --enable-shared \
    --enable-pic \
    --host=$my_host \
    --cross-prefix=$CROSS_PREFIX \
    --sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \

make -j8
make install
}

#armeabi-v7a
PREFIX=./android/armeabi-v7a
my_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++编译器参数,参数含义同上
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
build_android

如果是第一次使用这个 buildx264_r21e.sh 编译x264就使用下面的命令:

sudo chmod +x buildx264_r21e.sh 
sudo apt-get install make
bash buildx264_r21e.sh 

编译成功后会在x264路径下的 android/armeabi-v7a 路径下(这两个文件夹是脚本帮我们生成的)生成 include 和 lib 两个文件夹,lib 文件夹下面有 libx264.so 和 libx264.so.164 ,下面给出只生成 libx264.so 的解决办法。
在这里插入图片描述
在 ~/x264/configure脚本中搜索

echo "SONAME=libx264.so.$API"

在这里插入图片描述
将.$API去掉,然后保存
在这里插入图片描述
终端运行

cd ~/x264
rm -r android #要先删掉这个文件夹,make clean是删不掉这个生成的文件夹的
make clean
bash buildx264_r21e.sh 

在这里插入图片描述
现在就只生成了libx264.so,而且这个 so 是带了符号表信息的,当android native 调用了 x264 的函数出错后,我们可以使用 android ndk21re 提供的 add2line工具找到是调用到哪个 x264 的函数报的错。

需要注意的是,执行完 buildx264_r21e.sh ,需要再次执行 buildx264_r21e.sh ,那么需要先在终端执行 rm -r android 和 make clean

ndk14-22的下载链接

https://dl.google.com/android/repository/android-ndk-r22b-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip

https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值