在适用于Android的Windows操作系统中的Cygwin下构建FFMPEG

时间:2017-06-08 05:41:09

标签: android linux ffmpeg android-ndk cygwin

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

到目前为止,我采取了以下步骤。

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

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

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   重修/窗口-x86_64的/ bin中/../ LIB / GCC /臂-Linux的androideabi / 4.9.x /../../../../臂-Linux的一个   droideabi / bin / ld.exe:错误:libavutil / libavutil.so:1:1:语法错误,   意外的'!',表示$ end

     

C:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p   重修/窗口-x86_64的/ bin中/../ LIB / GCC /臂-Linux的androideabi / 4.9.x /../../../../臂-Linux的一个   droideabi / bin / ld.exe:错误:libavutil / libavutil.so:不是对象或   archive collect2.exe:error: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   重修/窗口-x86_64的/ bin中/../ LIB / GCC /臂-Linux的androideabi / 4.9.x /../../../../臂-Linux的一个   droideabi / bin / ld.exe:错误:libavutil / libavutil.so:1:1:语法错误,   意外的'!',表示$ end

     

C:/users/sonic/appdata/local/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/p   重修/窗口-x86_64的/ bin中/../ LIB / GCC /臂-Linux的> androideabi / 4.9.x /../../../../臂-Linux的一个   droideabi / bin / ld.exe:错误:libavutil / libavutil.so:不是对象或   archive collect2.exe:error:ld返回1退出状态make:***   [library.mak:94:libswscale / libswscale-4.so]错误1

How to compile ffmpeg-2.5.3 on windows with android-ndk-r10d

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

  

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

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

感谢您的时间,如果您能提供任何反馈意见,那肯定会有所帮助。

作为参考,这是我的config.log

  

结束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: /用户/音速/应用程序数据/本地/ Android设备/ SDK / NDK束/平台/机器人-9 /拱形臂/

     

-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-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -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 -oc:/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-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -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 -c -oc:/ffmpegtmp/ffconf.8joa74tC.oc:/ffmpegtmp/ffconf.qoBF6X98.c test_cflags - Wmaybe -ininitialized check_cc -Wmaybe -ininitialized 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-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -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 -oc:/ffmpegtmp/ffconf.8joa74tC.oc:/ffmpegtmp/ffconf.qoBF6X98 .C

1 个答案:

答案 0 :(得分:0)

如果您使用具有相同ABI(应用程序二进制接口)的相同编译器版本,则应该没有问题。我之前使用RISC-V库已经这样做了,我想它与ARM没有什么不同。

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