2013-08-12 39 views
5

Tôi đã gặp rất nhiều rắc rối khi biên dịch ffmpeg trên các cửa sổ. Tôi hiện đang sử dụng thiết bị đầu cuối cgywin để chạy mã. Tôi đã thử làm theo nhiều hướng dẫn phổ biến nhất trên web nhưng tôi dường như không làm cho nó hoạt động được. Tôi hiện đang sử dụng hướng dẫn này như một hướng dẫn http://www.roman10.net/how-to-build-ffmpeg-for-android/Các vấn đề khi biên dịch ffmpeg trên các cửa sổ bằng cách sử dụng cygwin

đâu tôi tại địa chỉ:

tôi đã tạo ra một kịch bản 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 

sau đó tôi đi theo bước 4-6 này bài đăng Does anyone find this useful? - Compiling FFMPEG on Windows with Cywin and NDK r5 bao gồm

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 

Khi tôi chạy tập lệnh trong cgywin tôi nhận kết quả này:

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 

Sau khi tập lệnh này chạy, tôi nhận được một số tệp mới trong thư mục ffmpeg của mình. Chúng là .config, config (tiêu đề), config.mak, config.fate. Thư mục android không bao giờ được tạo ra như nó được cho là vậy. Tôi cũng không chắc chắn nơi mà các lỗi library.mak đến từ xem xét rằng nó đi kèm với ffmpeg tải về.

Tôi không chắc chắn nơi này tôi sẽ sai trong tất cả điều này. Tôi cảm thấy như thực tế là tôi đang sử dụng các cửa sổ sẽ làm cho quá trình xây dựng này khác nhau.

+0

Kiểm tra dòng 105 của 'library.mak'. Nó có thể thiếu một ký tự 'TAB' ở đầu dòng. – devnull

+0

Tôi đã thêm tab nhưng kết quả là lỗi của công thức 'library.mak: 105: *** bắt đầu trước mục tiêu đầu tiên. Dừng lại.' bất kỳ ý tưởng? – Papajohn000

+0

Đây là câu trả lời cho một vấn đề tương tự http://stackoverflow.com/questions/11634318/makefile-missing-separator-on-cygwin –

Trả lời

1

Lỗi đầu tiên nói "CẢNH BÁO: C: /.../ arm-linux-androideabi-pkg-config không tìm thấy, phát hiện thư viện có thể không thành công". Vì vậy, tôi đề nghị sửa chữa đường dẫn.

'C: /' không phải là đường dẫn POSIX. Các chương trình Cygwin có thể dịch nó (với một cảnh báo).

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

Tài liệu về cách Cygwin lập bản đồ POSIX- and Win32-style paths.

Từ kinh nghiệm của tôi, bạn có vấn đề khi bạn trộn dấu gạch chéo và dấu gạch chéo ngược hoặc khi bạn gọi lệnh gốc của Windows từ Cygwin. Example:

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

Theo tôi, bạn nên hardcode một con đường POSIX, hoặc sử dụng các lệnh sau:

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

Nhưng có lẽ tôi complety sai. Tôi cho rằng bạn đã kiểm tra đường dẫn

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' 

Và tôi supppose bạn đã kiểm tra dòng 105 của tập tin mk của bạn (bảng biểu và linux dòng thức ăn).

+0

'ls 'c: /'' chỉ hoạt động tốt –

+0

@BenVoigt, bạn nói đúng. Tôi đã thử nghiệm với 'c:' khác với 'c: /'. ls có lẽ là một ví dụ xấu. Vì vậy, tôi sửa chữa câu trả lời của tôi để nói chủ yếu là "sử dụng đường dẫn POSIX là tốt hơn".Và tôi giải thích nguyên nhân gốc rễ khác có thể ... – mcoolive

Các vấn đề liên quan