Ostatnio miałem dużo problemów z kompilowaniem plików ffmpeg w systemie Windows. Obecnie używam terminalu cgywin do uruchomienia kodu. Próbowałem podążać za wieloma najpopularniejszymi samouczkami w Internecie, ale wydaje mi się, że to nie działa. Obecnie używam tego kursu jako przewodnik http://www.roman10.net/how-to-build-ffmpeg-for-android/Problemy z kompilowaniem plików ffmpeg w oknach przy użyciu cygwin
gdzie jestem:
I utworzeniu skryptu bash
#!/bin/bash
NDK=C:/Users/jrblain/Development/adt-bundle-windows-x86_64-20130514/android-ndk-r9
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64
function build_one
{
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
--disable-everything \
--enable-demuxer=mov \
--enable-demuxer=h264 \
--disable-ffplay \
--enable-protocol=file \
--enable-avformat \
--enable-avcodec \
--enable-decoder=rawvideo \
--enable-decoder=mjpeg \
--enable-decoder=h263 \
--enable-decoder=mpeg4 \
--enable-decoder=h264 \
--enable-parser=h264 \
--disable-network \
--enable-zlib \
--disable-avfilter \
--disable-avdevice \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}
#arm v6
#CPU=armv6
#OPTIMIZE_CFLAGS="-marm -march=$CPU"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one
#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one
#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
Potem następuje kroki 4-6 tego po Does anyone find this useful? - Compiling FFMPEG on Windows with Cywin and NDK r5 który składa się z
4 - Open the file 'configure' in the root of the FFMPEG directory in a text editor.
5 - Comment out lines 2073, 2074 and 2075.
6 - Below 2075, add the following line:
TMPDIR=c:/cygwin/tmp
Kiedy wpadłem skryptu w cgywin mam ten wynik:
install prefix ./android/armv7-a
source path .
C compiler C:/Users/jrblain/Development/adt-bundle-windows-x86_64-20130514/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc
ARCH arm (armv7-a)
big-endian no
runtime cpu detection yes
ARMv5TE enabled yes
ARMv6 enabled yes
ARMv6T2 enabled yes
VFP enabled yes
NEON enabled yes
THUMB enabled no
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static yes
shared no
postprocessing support no
new filter support no
network support no
threading support pthreads
safe bitstream reader yes
SDL support no
opencl enabled no
texi2html enabled no
perl enabled no
pod2man enabled no
makeinfo enabled no
External libraries:
zlib
Enabled decoders:
h263 mjpeg rawvideo
h264 mpeg4
Enabled encoders:
Enabled hwaccels:
Enabled parsers:
h263 h264 mpeg4video
Enabled demuxers:
h264 mov
Enabled muxers:
Enabled protocols:
file
Enabled filters:
Enabled bsfs:
Enabled indevs:
Enabled outdevs:
License: LGPL version 2.1 or later
Creating config.mak, config.h, and doc/config.texi...
libavutil/avconfig.h is unchanged
WARNING: C:/Users/jrblain/Development/adt-bundle-windows-x86_64-20130514/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-pkg-config not found, library detection may fail.
library.mak:105: *** missing separator. Stop.
library.mak:105: *** missing separator. Stop.
C:\Users\jrblain\Development\adt-bundle-windows-x86_64-20130514\android-ndk-r9\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ld.exe: ,noexecstack: unknown -z option
C:\Users\jrblain\Development\adt-bundle-windows-x86_64-20130514\android-ndk-r9\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ld.exe: use the --help option for usage information
Po uruchomieniu skryptu otrzymuję nowe pliki w folderze ffmpeg. Są to .config, config (header), config.mak, config.fate. Folder android nigdy nie jest tworzony tak, jak powinien. Nie jestem również pewien, skąd pochodzi błąd library.mak, biorąc pod uwagę, że przyszedł z pobierania ffmpeg.
Nie jestem pewien, dokąd się to nie zgadza. Czuję, że fakt, że używam okien, spowoduje, że proces budowania będzie inny.
Sprawdź linię 105 pliku 'library.mak'. Prawdopodobnie brakuje jej znaku 'TAB' na początku linii. – devnull
Dodałem kartę, ale spowodowało błąd z "library.mak: 105: *** przepis zaczyna się przed pierwszym celem. Zatrzymać.' jakieś pomysły? – Papajohn000
Oto odpowiedź na podobny problem http://stackoverflow.com/questions/11634318/makefile-missing-separator-on-cygwin –