在 Windows OS for Android 中的 Cygwin 下构建 FFMPEG



在过去的几天里,我一直在努力为Windows操作系统上的Android项目构建FFMPEG,使用android-ndk-14d使用Cygwin。 我遵循了很多教程,在使用build_android.sh构建 FFMPEG 时遇到了很多错误。

以下是我到目前为止采取的步骤。

我下载了Cygwin并配置了构建FFMPEG所需的所有依赖项。

我用文本编辑器打开了 ffmpeg-3.3.1/配置文件,并更改为以下行。

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

我的build_android.sh如下

#!/bin/bash
NDK=C:/~/ndk-bundle
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function build_one
{
./configure 
--prefix=$PREFIX 
--enable-shared 
--disable-static 
--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=android 
--arch=arm 
--cpu=armv7-a 
--enable-cross-compile 
--sysroot=$SYSROOT 
--extra-cflags="-Os -fpic $ADDI_CFLAGS" 
--extra-ldflags="$ADDI_LDFLAGS" 
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

我运行了这些命令

dos2unix build_android.sh 
chmod +x build_android.sh
./build_android.sh

并且,,,当前收到此错误

c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p 重建/Windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-an droideabi/bin/ld.exe: error: libavutil/libavutil.so:1:1: syntax error, 意想不到的"!",$end

c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p 重建/Windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-an droideabi/bin/ld.exe:错误:libavutil/libavutil.so:不是对象或 存档收集2.exe:错误:LD 返回 1 个退出状态 make: *** [library.mak:94: libswscale/libswscale-4.so] 错误 1 LD

libswscale/libswscale-4.so c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p 重建/Windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-an droideabi/bin/ld.exe: error: libavutil/libavutil.so:1:1: syntax error, 意想不到的"!",$end

c:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p 重建/Windows-x86_64/bin/../lib/gcc/arm-linux->androideabi/4.9.x/../../../../arm-linux-an droideabi/bin/ld.exe:错误:libavutil/libavutil.so:不是对象或 存档收集2.exe:错误:LD 返回 1 退出状态:*** [library.mak:94: libswscale/libswscale-4.so]错误 1

如何使用android-ndk-r10d在Windows上编译ffmpeg-2.5.3

从上面链接上评论的评论来看,似乎是 更容易在Linux/Unix OS中构建FFMPEG。我的第一个问题可能是一个愚蠢的问题。但如果有人可以指导我完成这项工作,我将不胜感激。

如果我在 Linux for Android 上构建 FFMPEG,我可以复制或移动它们吗? 结果输出(arm/lib文件夹包含共享库,而arm/include文件夹包含libavcodec,libavformat,libavfilter,libavutil,libswscale等的头文件)到Windows操作系统,并利用它们用于 我的安卓项目?

由于我的公司只为项目提供Windows操作系统,所以我必须在Windows操作系统上使用它们。

感谢您抽出宝贵时间,如果您有任何反馈可以提供,那肯定会有所帮助。

作为参考,这是我的配置.log

END c:/ffmpegtmp/ffconf.qoBF6X98.c C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc --sysroot=C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/platforms/android-9/arch-arm/

-isysroot C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/platforms/android-9/arch-arm/-D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Dstrtod=avpriv_strtod -DPIC -Os -fpic -marm -march=armv7-a -std=c11 -fomit-frame-pointer -fPIC -marm -pthread -g -wdeclaration-afterstatement-wall--wdisabled-optimization -wpointer-arith -wredundant-decls -wwrite-string -wtype-limits -wundef -wmissing-prototypes -wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-括号 -Wno-switch -Wno-format-zero-length -Wno-pointer 符号 -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration-werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -c -o c:/ffmpegtmp/ffconf.8joa74tC.o

c:/ffmpegtmp/ffconf.qoBF6X98.c check_cflags -fdiagnostics-color=auto test_cflags -fdiagnostics-color=auto check_cc -fdiagnostics-color=auto BEGIN c:/ffmpegtmp/ffconf.qoBF6X98.c 1 int x;END c:/ffmpegtmp/ffconf.qoBF6X98.c C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc --sysroot=C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/platforms/android-9/arch-arm/

-isysroot C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/platforms/android-9/arch-arm/-D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Dstrtod=avpriv_strtod -DPIC -Os -fpic -marm -march=armv7-a -std=c11 -fomit-frame-pointer -fPIC -marm -pthread -g -wdeclaration-afterstatement-wall--wdisabled-optimization -wpointer-arith -wredundant-decls -wwrite-string -wtype-limits -wundef -wmissing-prototypes -wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-括号 -Wno-switch -Wno-format-zero-length -Wno-pointer 符号 -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -werror=format-security -werror=implicit-function-declarations -werror=missing-prototypes -werror=return-type -werror=vla -wformat -fdiagnostics-color=auto -c -o c:/ffmpegtmp/ffconf.8joa74tC.o c:/ffmpegtmp/ffconf.qoBF6X98.c test_cflags -Wmaybe-uninitialized check_cc -Wmaybe-uninitialized BEGIN

c:/ffmpegtmp/ffconf.qoBF6X98.c 1 int x;END c:/ffmpegtmp/ffconf.qoBF6X98.c C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc --sysroot=C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/platforms/android-9/arch-arm/

-isysroot C:/Users/sonic/AppData/Local/Android/sdk/ndk-bundle/platforms/android-9/arch-arm/-D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Dstrtod=avpriv_strtod -DPIC -Os -fpic -marm -march=armv7-a -std=c11 -fomit-frame-pointer -fPIC -marm -pthread -g -wdeclaration-afterstatement-wall--wdisabled-optimization -wpointer-arith -wredundant-decls -wwrite-string -wtype-limits -wundef -wmissing-prototypes -wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-括号 -Wno-switch -Wno-format-zero-length -Wno-pointer 符号 -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration-werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wmaybe-uninitialized -c -o c:/ffmpegtmp/ffconf.8joa74tC.o c:/ffmpegtmp/ffconf.qoBF6X98.c

如果您使用相同的编译器版本和相同的 ABI(应用程序二进制接口),那么应该没有问题。我以前用RISC-V库做过,我想ARM也没有什么不同。

事实上,这正是你在Windows上使用Android NDK所做的,编译ARM二进制文件以在Linux上运行!无论你是在Windows还是Linux上交叉编译FFMPEG,你最终仍然会得到能够在同一个Android系统上运行的相同二进制文件。

最新更新