本文的交叉编译在window上安装VMware,使用Ubuntu20.4进行的编译。

一、安装NDK:

        1、下载解压:

        在NDK 下载  |  Android NDK  |  Android Developers下载Liunx平台的NDK。

        本人下载的是android-ndk-r27c-linux.zip版本的。

        解压android-ndk-r27c-linux.zip

    unzip android-ndk-r27c-linux.zip 

        在存放NDK的目录下解压 android-ndk-r27c-linux.zip:

        2、修改android-ndk-r27c-linux文件权限:      

sudo chmod 777 -R android-ndk-r27c

        3、NDK的环境变量的配置:

        编辑/etc/profile:

    sudo vim /etc/profile

        将NDK存放的路径加入到环境当中:

        路径为NDK存放的路径,可以cd到NDK文件夹下pwd后获取:

        之后配置如下环境变量: 

export PATH=/home/wyy/Android/sdk/platform-tools:$PATH
export PATH=/home/wyy/Android/sdk/tools:$PATH
export ANDROID_NDK=/home/wyy/Android/NDKS/android-ndk-r27c
export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin

       在/etc/profile文件中配置退出“INSERT”模式后“:wq”保存设置。

        更新/etc/profile配置:

source /etc/profile

        验证NDK版本:

ndk-build --version

       

二、下载解压FFmpeg:

        1、下载ffmpeg:

        通过ffmpeg的下载页面下载需要的ffmpeg的版本:Download FFmpeg

        本人下载的是:ffmpeg-5.1.6.tar.xz版本的

        2、解压ffmpeg:

        解压ffmpeg-5.1.6.tar.xz

    tar -xvf ffmpeg-5.1.6.tar.xz

        3、修改文件权限

sudo chmod 777 -R ffmpeg-5.1.6

三、创建编译脚本

         1、在ffmpeg的文件目录下运行./configure:

        会出现的错误提示: 

        如未安装yasm,则需要安装yasm:

        

       2、创建android_build1.sh编译脚本:

        在ffmpeg-5.1.6文件夹下创建android_build1.sh:

sudo gedit android_build1.sh

        输入如下脚本代码:

#!/bin/bash
# 用于编译android平台的脚本# NDK所在目录
NDK_PATH=/home/wyy/Android/NDKS/android-ndk-r27c # tag1
# macOS 平台编译,其他平台看一下 $NDK_PATH/toolchains/llvm/prebuilt/ 下的文件夹名称
HOST_PLATFORM=linux-x86_64  #tag1
# minSdkVersion
API=23TOOLCHAINS="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM"
SYSROOT="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/sysroot"
# 生成 -fpic 与位置无关的代码
CFLAG="-D__ANDROID_API__=$API -Os -fPIC -DANDROID "
LDFLAG="-lc -lm -ldl -llog "# 输出目录
PREFIX=`pwd`/android
# 日志输出目录
CONFIG_LOG_PATH=${PREFIX}/log
# 公共配置
COMMON_OPTIONS=
# 交叉配置
CONFIGURATION=build() {APP_ABI=$1echo "======== > Start build $APP_ABI"case ${APP_ABI} inarmeabi-v7a)ARCH="arm"CPU="armv7-a"MARCH="armv7-a"TARGET=armv7a-linux-androideabiCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"# 交叉编译工具前缀CROSS_PREFIX="$TOOLCHAINS/bin/arm-linux-androideabi-"EXTRA_CFLAGS="$CFLAG -mfloat-abi=softfp -mfpu=vfp -marm -march=$MARCH "EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="--enable-neon --cpu=$CPU ";;arm64-v8a)ARCH="aarch64"TARGET=$ARCH-linux-androidCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"EXTRA_CFLAGS="$CFLAG"EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="";;x86)ARCH="x86"CPU="i686"MARCH="i686"TARGET=i686-linux-androidCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"#EXTRA_CFLAGS="$CFLAG -march=$MARCH -mtune=intel -mssse3 -mfpmath=sse -m32"EXTRA_CFLAGS="$CFLAG -march=$MARCH  -mssse3 -mfpmath=sse -m32"EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="--cpu=$CPU ";;x86_64)ARCH="x86_64"CPU="x86-64"MARCH="x86_64"TARGET=$ARCH-linux-androidCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"#EXTRA_CFLAGS="$CFLAG -march=$CPU -mtune=intel -msse4.2 -mpopcnt -m64"EXTRA_CFLAGS="$CFLAG -march=$CPU -msse4.2 -mpopcnt -m64"EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="--cpu=$CPU ";;esacecho "-------- > Start clean workspace"
make cleanecho "-------- > Start build configuration"CONFIGURATION="$COMMON_OPTIONS"CONFIGURATION="$CONFIGURATION --logfile=$CONFIG_LOG_PATH/config_$APP_ABI.log"CONFIGURATION="$CONFIGURATION --prefix=$PREFIX"CONFIGURATION="$CONFIGURATION --libdir=$PREFIX/libs/$APP_ABI"CONFIGURATION="$CONFIGURATION --incdir=$PREFIX/includes/$APP_ABI"CONFIGURATION="$CONFIGURATION --pkgconfigdir=$PREFIX/pkgconfig/$APP_ABI"CONFIGURATION="$CONFIGURATION --cross-prefix=$CROSS_PREFIX"CONFIGURATION="$CONFIGURATION --arch=$ARCH"CONFIGURATION="$CONFIGURATION --sysroot=$SYSROOT"CONFIGURATION="$CONFIGURATION --cc=$CC"CONFIGURATION="$CONFIGURATION --cxx=$CXX"CONFIGURATION="$CONFIGURATION --ld=$LD"# nm 和 stripCONFIGURATION="$CONFIGURATION --nm=$TOOLCHAINS/bin/llvm-nm"CONFIGURATION="$CONFIGURATION --strip=$TOOLCHAINS/bin/llvm-strip"CONFIGURATION="$CONFIGURATION $EXTRA_OPTIONS"echo "-------- > Start config makefile with $CONFIGURATION --extra-cflags=${EXTRA_CFLAGS} --extra-ldflags=${EXTRA_LDFLAGS}"./configure ${CONFIGURATION} \--extra-cflags="$EXTRA_CFLAGS" \--extra-ldflags="$EXTRA_LDFLAGS"echo "-------- > Start make $APP_ABI with -j1"make -j1echo "-------- > Start install $APP_ABI"make installecho "++++++++ > make and install $APP_ABI complete."}build_all() {#配置开源协议声明COMMON_OPTIONS="$COMMON_OPTIONS --enable-gpl"#目标android平台COMMON_OPTIONS="$COMMON_OPTIONS --target-os=android"#取消默认的静态库COMMON_OPTIONS="$COMMON_OPTIONS --disable-static"COMMON_OPTIONS="$COMMON_OPTIONS --enable-shared"COMMON_OPTIONS="$COMMON_OPTIONS --enable-protocols"#开启交叉编译COMMON_OPTIONS="$COMMON_OPTIONS --enable-cross-compile"COMMON_OPTIONS="$COMMON_OPTIONS --enable-optimizations"COMMON_OPTIONS="$COMMON_OPTIONS --disable-debug"#尽可能小COMMON_OPTIONS="$COMMON_OPTIONS --enable-small"COMMON_OPTIONS="$COMMON_OPTIONS --disable-doc"#不要命令(执行文件)COMMON_OPTIONS="$COMMON_OPTIONS --disable-programs"  # do not build command line programsCOMMON_OPTIONS="$COMMON_OPTIONS --disable-ffmpeg"    # disable ffmpeg buildCOMMON_OPTIONS="$COMMON_OPTIONS --disable-ffplay"    # disable ffplay buildCOMMON_OPTIONS="$COMMON_OPTIONS --disable-ffprobe"   # disable ffprobe buildCOMMON_OPTIONS="$COMMON_OPTIONS --disable-symver"COMMON_OPTIONS="$COMMON_OPTIONS --disable-network"COMMON_OPTIONS="$COMMON_OPTIONS --disable-x86asm"COMMON_OPTIONS="$COMMON_OPTIONS --disable-asm"#启用COMMON_OPTIONS="$COMMON_OPTIONS --enable-pthreads"COMMON_OPTIONS="$COMMON_OPTIONS --enable-mediacodec"COMMON_OPTIONS="$COMMON_OPTIONS --enable-jni"COMMON_OPTIONS="$COMMON_OPTIONS --enable-zlib"COMMON_OPTIONS="$COMMON_OPTIONS --enable-pic"COMMON_OPTIONS="$COMMON_OPTIONS --enable-muxer=flv"#COMMON_OPTIONS="$COMMON_OPTIONS --enable-avresample"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=h264"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mpeg4"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mjpeg"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=png"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=vorbis"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=opus"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=flac"echo "COMMON_OPTIONS=$COMMON_OPTIONS"echo "PREFIX=$PREFIX"echo "CONFIG_LOG_PATH=$CONFIG_LOG_PATH"mkdir -p ${CONFIG_LOG_PATH}#build "armeabi-v7a"build "arm64-v8a"build "x86"build "x86_64"
}echo "-------- Start --------"
build_all
echo "-------- End --------"

       

        3、运行android_build1.sh脚本:

sudo sh android_build1.sh 

        

        4、编译完成:

        经过一段时间的编译后,在android的文件夹下。编译完成的结果输出如下:

        

        include文件夹:

        包含编译目标平台的头文件信息。

        lib文件夹:

        包含编译目标平台的so库。

        

        log文件夹:

      包含编译目标平台编译时的log信息。

        pkgconfig文件夹:

        该文件包含了FFmpeg库的相关信息,如头文件路径、库文件路径等。

        

        share文件夹:

        包含文档和手册,帮助用户理解和使用FFmpeg。

        以上的资源文件可在下面连接可下载:https://download.csdn.net/download/wangyongyao1989/91214032?spm=1001.2014.3001.5503

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89159.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89159.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89159.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极海G32R501双向数字电源解决方案 赋能AI服务器及电源应用创新

6月26日,Big-Bit商务网主办的2025中国电子热点解决方案创新峰会在东莞召开,峰会以“核心智变、能效跃迁”为主题,聚焦光储充、800V超充、AI服务器、BMS、智能汽车照明与汽车中小电机电控应用。 峰会期间,珠海极海半导体有限公司&a…

【修电脑的小记录】连不上网

问题概述 问题表现为:电脑连接网络后,显示已连接但无法上网。 环境信息: - DNS 修改无效,ping 外网(8.8.8.8)失败 - 尝试重置网络参数、多种命令无果 🔍 排查过程 1. 执行以下命令重置网络&a…

QT中QSS样式表的详细介绍

转自个人博客 **Qt样式表(Qt Style Sheets,简称QSS)**是一种类似于HTML中的CSS(层叠样式表)的机制,用于自定义Qt应用程序的外观。通过QSS,开发者可以轻松地修改控件的外观,而无需更改…

Spring 依赖注入:官方推荐方式及最佳实践

Spring 依赖注入:官方推荐方式及最佳实践 你正在遭遇以下困境吗? 项目变大后,依赖关系像一团乱麻,牵一发而动全身?单元测试难如登天,被迫启动整个Spring容器?NullPointerException 总在运行时突…

javaweb听课笔记day1

MySQL数据模型 关系型数据库: 通过表来存储数据 关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库 优点: 都是使用表结构,格式一致,易于维护;使用通用的SQL语言操作…

《从量子奇境到前端优化:解锁卡西米尔效应的隐藏力量》

卡西米尔效应由荷兰物理学家亨德里克卡西米尔于1948年提出,它源于量子场论中“真空不空”的奇异观点。在传统认知里,真空是一片虚无,但量子理论指出,真空中充满了持续涨落的能量,即零点能。想象有两片中性的金属板被放…

【学习笔记】强化学习的数学原理

软活硬整,纳什又把RL翻出来讲了一遍,我以为是温故而知新,原来是在卖书。 不过温故而知新还是没啥毛病的。 PS:今天装Notepad时看到的,我还以为现在连用个Notepad都要给天线宝宝们捐款了。 文章目录 PART 11 overview…

深入“火星棒球数据API”:用数据解锁棒球世界的无限可能

在棒球运动日益数据化的今天,高效获取和处理海量比赛信息已成为球队制胜、媒体解读、球迷深入理解比赛的关键。“火星棒球数据API” 应运而生,成为连接棒球智慧与大数据技术的桥梁。本文将探讨这一API的核心价值、功能亮点及其如何重塑我们体验和分析棒球…

[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的校园服务平台管理系统,推荐!

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园服务平台管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…

「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)

在本文中,您可以找到有关WEB项目的信息。将了解: Web项目结构和参数Web开发生产力工具JSP代码完成和验证 这些特性在MyEclipse中可用。在上文中(点击这里回顾>>),我们为大家介绍了Web开发效率工具、Web项目参数…

笨方法学python -练习6

程序: print("Mary had a little lamb.") print("Its fleece was white as {}.".format(snow)) print("And everywhere that Mary went.") print("." * 10) # what′d that do? end1 "C" end2 "h&qu…

【MySQL】Binlog文件占用空间比较大,如何清理

一、前言 在进行一次数据导入之后,发现服务器磁盘爆满,初步判断是数据库产生了大量binlog所致,接下来进行分析处理。 二、分析 1、查看磁盘空间 通过df -h命令,查看磁盘空间占用情况 2、查找占用文件或目录 通过命令:…

车载诊断架构 --- 非易失性存储器(NVM)相关设置项

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

C#: 输入对话框窗口函数

这是一个 C# 输入对话框函数,主要功能包括: 基础功能:创建带标题、提示文本和输入框的对话框,返回用户输入或空字符串(取消时) 增强特性: 支持必填项验证支持正则表达式格式验证实时错误提示与…

PCB工艺学习与总结-20250628

一、PCB板材 1、结构组成 基板:作为电路板的支撑体,通常由绝缘材料制成,如玻璃纤维或塑料。 导线:用于连接电路板上的各个元件,传输电流和信号。 元件:包括电阻、电容、电感、二极管、晶体管等,用于实现电路的各种功能。 焊盘:用于焊接元件引脚的金属片,确保元件…

VUE2与VUE3项目环境变量创建与使用区别

环境变量文件是项目中的.env开头的文件,如下图: 下图是VUE2.env文件中的配置,是以VUE_APP开头的 VUE_APP_PAGE_TITLE系统 VUE_APP_SERVICE_PREFIX/gateway/xxxxx在使用时 只需要 调用 process.env.VUE_APP_SERVICE_PREFIX 就可以获取到值 而…

php flush实时输出线上环境好使,本地环境等待一段时间后一次性输出结果的原因

近期对接deepseek接口时为了拥有较好的用户体验,等待答案返回时采用了flush分布输出,但是线上环境下可以正常分布输出,同样代码在本地总是等待许久后一次性出结果,排查许久,发现竟然是本地和线上不同的php加载模式导致…

【世纪龙科技】东风风光580汽车维护与底盘拆装检修仿真教学软件

在职业院校汽车专业的教学实践中,传统的汽车维护与底盘拆装实训常面临诸多挑战。实车操作不仅存在安全隐患,设备损耗、教学成本高的问题也不容忽视;部分学生因操作机会有限,难以系统掌握规范流程和仪器使用,教师在教学…

React大型项目目录结构设计

以下这种结构设计适合以下场景: 10人以上开发团队协作长期维护的中大型项目需要高度模块化和可扩展性的项目需要严格类型检查的TypeScript项目 根据实际需求,可以适当调整模块划分和目录结构,但保持核心的模块化思想和分层架构是关键。 Re…

【C语言】超市管理系统丨完整源码与实现解析

通过这个完整的超市管理系统,您将掌握C语言核心数据结构与文件操作技术 设计思路与核心数据结构 本系统使用动态数组管理商品数据,支持商品增删改查、文件存储和数据统计功能。系统采用模块化设计,分为商品管理、文件操作和用户界面三大模块…