Ubuntu 编译ffmpeg 踩坑(三)

编译Android下可以使用的ffmpeg

参照视频操作:https://coding.imooc.com/lesson/279.html#mid=37236

其他流程都没有什么问题其中有几个问题我记录一下

1.ERROR: Failed to create toolchain.

 解决方案:
apt-get install python
安装python后再执行编译即可解决ERROR: Failed to create toolchain.问题

 

 2.编译中遇到 make: *** [ffbuild/common.mak:60: libavdevice/v4l2.o] Error 1

CC  libavdevice/v4l2.o
libavdevice/v4l2.c:135:9: error: assigning to 'int (*)(int, unsigned long, ...)' from incompatible type '<overloaded function type>'
        SET_WRAPPERS();
        ^~~~~~~~~~~~~~
libavdevice/v4l2.c:121:17: note: expanded from macro 'SET_WRAPPERS'
    s->ioctl_f  = prefix ## ioctl;      \
                ^           ~~~~~
/home/cc/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/bits/ioctl.h:56:5: note: candidate function has type mismatch at 2nd parameter
      (expected 'unsigned long' but has 'unsigned int')
int ioctl(int __fd, unsigned __request, ...) __overloadable __enable_if(1, "") __RENAME(ioctl);
    ^
/home/cc/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/bits/ioctl.h:36:5: note: candidate function has type mismatch at 2nd parameter
      (expected 'unsigned long' but has 'int')
int ioctl(int __fd, int __request, ...);
    ^
1 error generated.
make: *** [ffbuild/common.mak:60: libavdevice/v4l2.o] Error 1

 解决方案:

在编译脚本中添加了宏:BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD

 完整代码段:

#!/bin/bash
#在ffmpeg目录下执行该脚本,输出在ffmpeg目录下的android-build 目录里
PREFIX=./android-build

#设置你自己的NDK位置
#NDK_HOME=/Users/lichao/Downloads/ndk21
NDK_HOME=/home/fly/Downloads/ndk21

COMMON_OPTIONS="\
    --target-os=android \
    --disable-static \
    --enable-shared \
    --enable-small \
    --disable-programs \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-doc \
    --disable-symver \
    --disable-asm \
    "
function build_android {

    ./configure \
    --libdir=${PREFIX}/libs/armeabi-v7a \
    --incdir=${PREFIX}/includes/armeabi-v7a \
    --pkgconfigdir=${PREFIX}/pkgconfig/armeabi-v7a \
    --arch=arm \
    --cpu=armv7-a \
    --cross-prefix="${NDK_HOME}/bin/arm-linux-androideabi-" \
    --sysroot="${NDK_HOME}/sysroot/" \
    --extra-ldexeflags=-pie \
	--extra-cflags="-Os -fpic -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD" \
    ${COMMON_OPTIONS}
    make clean
    make -j8 && make install


    ./configure \
    --libdir=${PREFIX}/libs/arm64-v8a \
    --incdir=${PREFIX}/includes/arm64-v8a \
    --pkgconfigdir=${PREFIX}/pkgconfig/arm64-v8a \
    --arch=aarch64 \
    --cpu=armv8-a \
    --cross-prefix="${NDK_HOME}/bin/aarch64-linux-android-" \
    --sysroot="${NDK_HOME}/sysroot/" \
    --extra-ldexeflags=-pie \
	--extra-cflags="-Os -fpic -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD" \
    ${COMMON_OPTIONS} 
    make clean
    make -j8 && make install

    ./configure \
    --libdir=${PREFIX}/libs/x86 \
    --incdir=${PREFIX}/includes/x86 \
    --pkgconfigdir=${PREFIX}/pkgconfig/x86 \
    --arch=x86 \
    --cpu=i686 \
    --cross-prefix="${NDK_HOME}/bin/i686-linux-android-" \
    --sysroot="${NDK_HOME}/sysroot/" \
    --extra-ldexeflags=-pie \
	--extra-cflags="-Os -fpic -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD" \
    ${COMMON_OPTIONS} 
    make clean
    make -j8 && make install

    ./configure \
    --libdir=${PREFIX}/libs/x86_64 \
    --incdir=${PREFIX}/includes/x86_64 \
    --pkgconfigdir=${PREFIX}/pkgconfig/x86_64 \
    --arch=x86_64 \
    --cpu=x86_64 \
    --cross-prefix="${NDK_HOME}/bin/x86_64-linux-android-" \
    --sysroot="${NDK_HOME}/sysroot/" \
    --extra-ldexeflags=-pie \
	--extra-cflags="-Os -fpic -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD" \
    ${COMMON_OPTIONS}
    make clean
    make -j8 && make install
};

build_android

 这里特别注意:在执行./build_ffmpeg_for_android1.sh的时候会报没有权限

解决方案:给予执行权限就可以

chmod 755 ./build_ffmpeg_for_android1.sh
./build_ffmpeg_for_android1.sh

我的电脑等待20分钟左右 终于编译完成:

root@ubuntu:/home/fly/FFmpeg/ffmpeg# ls
android-build                 COPYING.GPLv3     libavfilter    presets
build_ffmpeg_for_android1.sh  COPYING.LGPLv2.1  libavformat    README.md
build_ffmpeg_for_android.sh   COPYING.LGPLv3    libavresample  RELEASE
Changelog                     CREDITS           libavutil      RELEASE_NOTES
compat                        doc               libpostproc    tests
config.asm                    ffbuild           libswresample  tools
config.h                      fftools           libswscale     VERSION
configure                     INSTALL.md        LICENSE.md
CONTRIBUTING.md               libavcodec        MAINTAINERS
COPYING.GPLv2                 libavdevice       Makefile
root@ubuntu:/home/fly/FFmpeg/ffmpeg# cd .android-build
bash: cd: .android-build: No such file or directory
root@ubuntu:/home/fly/FFmpeg/ffmpeg# cd ./android-build
root@ubuntu:/home/fly/FFmpeg/ffmpeg/android-build# ls
includes  libs  pkgconfig
root@ubuntu:/home/fly/FFmpeg/ffmpeg/android-build# cd ./libs
root@ubuntu:/home/fly/FFmpeg/ffmpeg/android-build/libs# ls
armeabi-v7a
root@ubuntu:/home/fly/FFmpeg/ffmpeg/android-build/libs# cd ./armeabi-v7a
root@ubuntu:/home/fly/FFmpeg/ffmpeg/android-build/libs/armeabi-v7a# ls
libavcodec.so   libavfilter.so  libavutil.so      libswscale.so
libavdevice.so  libavformat.so  libswresample.so

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值