在过去的几天里,我一直在努力使用使用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
答案 0 :(得分:0)
如果您使用具有相同ABI(应用程序二进制接口)的相同编译器版本,则应该没有问题。我之前使用RISC-V库已经这样做了,我想它与ARM没有什么不同。
事实上,这正是您在Windows上使用Android NDK所做的,编译ARM二进制文件以在Linux上运行!无论您是在Windows还是Linux上交叉编译FFMPEG,您仍然可以使用能够在同一Android系统上运行的相同二进制文件。