2013-08-12 11 views
5

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.

+0

Sprawdź linię 105 pliku 'library.mak'. Prawdopodobnie brakuje jej znaku 'TAB' na początku linii. – devnull

+0

Dodałem kartę, ale spowodowało błąd z "library.mak: 105: *** przepis zaczyna się przed pierwszym celem. Zatrzymać.' jakieś pomysły? – Papajohn000

+0

Oto odpowiedź na podobny problem http://stackoverflow.com/questions/11634318/makefile-missing-separator-on-cygwin –

Odpowiedz

1

Pierwszy błąd mówi "OSTRZEŻENIE: C: /.../ arm-linux-androideabi-pkg-config nie znaleziono, wykrywanie biblioteki może się nie udać." Sugeruję więc naprawienie ścieżki.

'C: /' nie jest ścieżką POSIX. Programy Cygwin są w stanie przetłumaczyć (z ostrzeżeniem).

cd 'c:' # works. cd is a built-in command 
ls 'c:' # doesn't work 
ls 'c:/' # works (edited) 

Dokumentacja o tym, jak Cygwin mapuje POSIX- and Win32-style paths.

Z mojego doświadczenia wynika, że ​​masz problem z miksowaniem slashów i ukośników lub gdy wywołujesz natywne polecenie systemu Windows od Cygwin. Example:

javac -cp "$(cygpath -pw "$CLASSPATH")" hello.java 

Moim zdaniem, należy zakodować ścieżkę POSIX, lub użyć następującego polecenia:

cygpath -u 'c:' # the relevant command provided by Cygwin 
(cd 'c:' && pwd) # a tip, useful if you want a portable syntax 

Ale może jestem complety źle. Przypuszczam, że już sprawdzić ścieżkę

ls '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' 

I supppose już sprawdzenie linii 105 pliku mk (tabelaryczne i Linux paszowego linia).

+0

'ls 'c: /'' działa dobrze –

+0

@BenVoigt, masz rację. Testowałem z "c:" innym niż "c: /". Prawdopodobnie był to zły przykład. Więc poprawiam swoją odpowiedź, aby powiedzieć głównie "używaj ścieżki POSIX jest lepsza".I opinię inne możliwe przyczyny źródłowe ... – mcoolive

Powiązane problemy