加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ffmpeg 如何编译出单一的so文件

发布时间:2020-12-14 01:49:44 所属栏目:百科 来源:网络整理
导读:写在前面的废话 接上一篇,介绍了如何编译出多个so文件。本片介绍如何编译出单一的so文件。网上对于编译出单一库文件大致分为两种方式: 1、利用NDK 环境,编写mk文件生成 2、先编译出FFmpeg模块的库文件,然后链接模块的库文件 对于以上两种方式,笔者更倾

写在前面的废话

接上一篇,介绍了如何编译出多个so文件。本片介绍如何编译出单一的so文件。网上对于编译出单一库文件大致分为两种方式:
1、利用NDK 环境,编写mk文件生成
2、先编译出FFmpeg模块的库文件,然后链接模块的库文件
对于以上两种方式,笔者更倾向于第二种,所以,这里重点介绍第二种,感兴趣的话可自行测试第一种,这里给出链接:
http://www.52php.cn/article/p-pnsbgpol-bbt.html
废话到此,言归正传

1、先贴出sh文件
# build_andorid.sh

NDK=xxx/android-ndk-r10e
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64

function build_one
{
    ./configure 
        --prefix=$PREFIX          --enable-neon          --enable-hwaccel=h264_vaapi          --enable-hwaccel=h264_vaapi          --enable-hwaccel=h264_dxva2          --enable-hwaccel=mpeg4_vaapi          --enable-hwaccels          --enable-static          --enable-jni          --enable-mediacodec          --enable-asm          --disable-shared          --disable-doc          --disable-ffmpeg          --disable-ffplay          --disable-ffprobe          --disable-ffserver          --disable-avdevice          --disable-doc          --disable-symver          --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-          --target-os=linux          --arch=arm          --enable-cross-compile          --sysroot=$SYSROOT          --extra-cflags="-Os -fpic $ADDI_CFLAGS"          --extra-ldflags="$ADDI_LDFLAGS"          $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make -j4
    make install

    $TOOLCHAIN/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
    $TOOLCHAIN/bin/arm-linux-androideabi-ld -rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib  -soname libffmpeg.so -shared -nostdlib  -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libavfilter/libavfilter.a libswscale/libswscale.a libavdevice/libavdevice.a libswresample/libswresample.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
}
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
build_one

笔者通过这种方式编译出来之后,生成的libffmpeg.so文件大小是70多兆,相比于多个模块的多个so文件要大很多

2、鸣谢

本文参考链接:
http://www.52php.cn/article/p-rmjrowlo-bkb.html

只是改动了几处

  • 添加硬件解码
  • -z,noexecstack 修改为 -z noexecstack
  • 删除--warn-once

ps:在NDK 9之后,以上两个命令有所改变,第一个要把“,”替换为空格,第二个没有找到替换的东西,所有笔者就给删除了

到此,FFmpeng的编译工作结束。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读